《现代操作系统》读书笔记——进程与线程、存储管理

1、开机

    系统一般从硬盘启动,BIOS将设备上的第一个扇区读入内存并执行(第一个扇区是SETUP模块),SETUP告知OS硬件信息,将OS读入内存,初始化硬盘、IO、CPU、时钟等,启动后OS放在内存0地址处。

 

2、系统调用

    操作系统运行在内核态,可以执行任何指令;用户态下只使用了机器指令中的一个子集。中断是进入内核的唯一方法(如果没有用户态,所有程序可任意修改内存)。

    在用户态下,需要访问系统核心功能,使用系统调用,会让处理器进入内核模式,指令执行完后返回用户态。系统调用包括进程控制、文件读写操作、文件系统操作、系统控制(IO、时间等)、内存、网络、套接字、用户管理、进程通信等,系统调用可能阻塞。

    POSIX:可移植操作系统接口

 

3、进程

    一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值等,某一瞬间,CPU只能运行一个进程。在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文;进程未占用处理器时,进程上下文存储在进程的私有堆栈中。

    程序计数器:存放下一条指令所在单元的地址,执行指令时将指令从内存取到指令寄存器中。

    守护进程:停留在后台处理电子邮件、Web页面、新闻、打印之类活动的进程。

    进程的状态:

    操作系统维护一张进程表,每个进程占用一个进程表项,包括寄存器、程序计数器、堆栈指针、内存分配状况、文件状态等

 

4、线程

    共享进程的地址空间和所有可用数据;更轻量级,更容易创建、撤销(快1~2个数量级);线程共享进程的地址空间、全局变量、文件等,有自己的程序计数器、寄存器、堆栈、状态等。

    (1)用户级线程(1:n):在用户空间维护线程表,内核对线程包一无所知。线程切换比陷入内核快1个数量级,但是一个线程阻塞会导致进程阻塞,无法执行其它就绪的线程。

    (2)内核级线程(1:1):内核维护线程表,可以利用多处理器。

    (3)混合实现(m:n):每个内核级线程有一个用户级线程的集合(来自不同的进程)。

 

5、进程与线程的区别

    (1)进程的地址空间、全局变量等相互独立,同一进程内的线程则共享地址空间、全局变量等,线程只有一些必需的资源,程序计数器、寄存器、状态、栈等。

    (2)线程间可以直接读取进程数据进行通信,进程间通信需要其它机制。

    (3)线程上下文切换比进程快得多(1~2个数量级)。

 

6、进程间通信

    临界区:对共享内存进行访问的程序片段,任何两个进程不能同时处于其临界区;

    自旋锁:用于忙等待的锁,浪费CPU,可能死锁;

    信号量:进入代码段时,先获得一个信号量,完成后释放。信号量的acquire/release是原子操作;

    互斥量:数值为1的信号量;

    通信方式

    (1)管道,数据单向流动,只能在有亲缘关系的进程之间使用,用循环队列实现,通过fork()创建子进程,然后父子进程之间创建管道读写;

    (2)有名管道,允许无亲缘关系的进程通信;

    (3)信号量;

    (4)消息队列,消息的链表,存放在内核中;

    (5)信号;

    (6)共享内存,最快,由一个进程创建,多个进程可以访问;

    (7)套接字,可用于不同主机间的进程通信;

 

7、调度算法

    (1)轮转调度:时间片一般为20~50 ms;

    (2)最短进程优先;

    (3)优先级调度:需要(根据时间等)调整优先级,避免进程饿死;

    (4)最高响应比调度:响应比 = 进程等待时间/进程估计执行时间;

    (5)多级反馈队列调度:按优先级分成不同的队列,队列间使用优先级调度,队列内使用轮转调度;

 

8、地址空间和空闲内存管理

    直接用物理地址寻址,会破坏操作系统,难以运行多个进程,因此创造了内存抽象—地址空间,是一个进程可用于寻址内存的一套地址集合(类似IPV4地址),进程的地址空间相互独立。

    空闲内存管理可以使用(1)位图,内存被划分为一个个单元,每个单元对应位图中的一位。查找位图中连续0串耗时多。

    (2)链表,节点存储当前进程或空闲区的指示标志,找空闲区时沿链表搜索(最佳适配算法)。

    两种方法都有内存碎片。

 

9、虚拟内存

    使用虚拟内存时,虚拟地址不是被直接送到内存总线上,而是被送到内存管理单元(MMU),MMU把虚拟地址映射为物理内存地址。虚拟地址空间被划分为页面,物理内存被划分为页框,大小通常一样。

    页表给出了虚拟地址和物理地址之间的映射,页表项数是虚拟地址空间的页面数。虚拟地址被分为页号和偏移量,页号作为页表的索引,偏移量用于页框的寻址。

    每个进程都有自己的页表,页表项包括高速缓存禁止位、访问位(用于页面淘汰算法)、修改位(淘汰该页时是否写回磁盘)、保护位(是否有rwx权限)、在/不在位(是否缺页)、页框号等。

    用TLB(快表)缓存少量页表项,用多级页表解决页表过大的问题。

 

10、页面置换算法

    (1)最优页面置换算法:未来最远使用的页面,不可行;

    (2)FIFO;

    (3)第二次机会页面置换算法:设置访问位R,维护队列,如果队头R=0,置换掉;为1则置为0,放入队尾,继续搜索。缺点是所有的R都为1时效率低下;

    (4)时钟页面置换算法:用了循环队列改进第二次机会页面置换算法,不需要移动队列中的元素;

    (5)最近最少使用(LRU,least recently used):维护所有页面的链表,淘汰队头,读取缓存项时放到队尾,可以用LinkedHashMap实现;

       (6) LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值