7月9日笔记-内存、I/O

2015年07月09日

学习内容出自:一步步学习Linux多任务编程

  • 进程地址与虚拟存储空间
    早期的内存分配机制:把程序全部装入内存
    带来问题:进程地址空间不隔离、内存使用效率低、程序运行地址不确定
    解决办法:
    分段:操作系统处理好虚拟地址到物理内存的映射(但由于无法解决效率问题,于是有了分页)
    分页:用到这些页时再在物理地址空间中为这些页分配内存,再建立映射
    逻辑地址、线性地址、物理地址和虚拟地址的区别
    逻辑地址:不和绝对物理地址相干
    线性地址:
    1、逻辑地址变换产生线性地址
    2、
    (1)有分页机制 变换产生物理地址
    (2)无分页机制 直接就是物理地址
  • 线程浅析
    进程是程序执行的实例,线程才是真正的执行实体
    进程是资源分配的最小单位,线程是操作系统调度执行的最小单位
    Linux上的线程就是基于轻量级进程,由用户态的pthread库实现的,使用pthread后,在用户看来,每一个task_struct就对应一个线程,而一族线程以及它们共同引用的一组资源就是一个进程
  • 浅谈可重入函数和不可重入函数
    可重入:指一个可以被多任务调用的过程
    重入首先意味着这个函数可以被终端,除了使用自己栈上的变量不依赖于任何环境
    保证函数可重入性的方法
    1、尽量使用局部变量
    2、对于要使用的全局便变量要加以保护:关中断、信号量等
    下列函数多数是不可重入的
    1、使用静态数据结构
    2、调用malloc()或free()函数
    3、调用标准I/O函数
  • 浅谈标准I/O缓冲区
    目的:为了减少write的使用
    全缓冲:人为关闭文件、程序正常结束、填满缓冲区
    行缓冲:缓冲区填满、换行符、人为刷新缓冲区、程序正常结束
    不带缓冲:用户程序每次调用库函数做写操作都要通过系统调用写回内核
  • I/O多路复用
    epoll()的优点
    1、监视描述符不受限制
    2、select()和poll()要遍历整个fd集合,而epoll只需要判断就绪链表是否为空
    3、select()和poll()每次调用都要把fd集合从用户态往内核拷贝一次,而epoll只要一次拷贝