《Operating System Concepts(操作系统概念)》核心笔记
《Operating System Concepts(操作系统概念)》核心笔记
一、操作系统结构
1.人机交互
方式:GUI(图形用户界面)与命令解释程序。后者又称作外壳(shell)。
2.系统调用
2.1分类:Windows API(Windows系统)、POSIX API(POSIX系统)、java API(java虚拟机)。
2.2使用:程序员一般不直接使用系统调用,而是使用API。如C语言的libc。因为API使用方便,系统调用更注重细节。API函数库帮助我们调用系统调用。
2.3实现:以C语言的open()API为例,编译得到可执行文件,并运行。此时动态链接器会将glibc链接到该进程虚拟地址空间。运行到read代码段时glibc会向内核的系统调用接口传递系统调用号这一数字,并通过内核指定的寄存器传递参数。
2.4分类:进程控制、文件管理、设备管理、信息维护、通信、保护。
3.微内核
3.1功能:只提供调度、内存管理和进程通信。
3.2特点(对比宏内核):微内核非核心的内核功能由用户态的二进制程序实现。宏内核所有内核功能都由.ko内核文件实现。
3.3代表操作系统:Windows NT,QNX,Tru64 Unix。
4.混合系统
4.1功能:内核提供核心服务,如调度与内存管理,其他的功能由别的.ko内核模块实现,需要时动态加载,但不像微内核,这些内核模块像函数一样直接相互调用,因为共享地址空间。
5.系统启动
5.1传统Linux系统启动方式(BIOS+MBR):BIOS 从磁盘LBA 0(0号扇区)加载512字节MBR(文件为boot.img)到内存0x7C00并执行。MBR引导代码(前446字节)加载GRUB第二阶段(core.img)到内存0x8000,跳转执行。core.img解析grub.cfg,若双系统则显示grub窗口,加载用户选择的Linux内核或Windows Boot Manager到内存。————链式加载
5.2现代Linux系统启动方式(UEFI+GPT):UEFI不读取MBR,而是从 ESP分区(EFI System Partition) 加载 .efi 文件(如 grubx64.efi)。.efi 文件直接解析grub.cfg文件。
5.3Windows系统启动:传统方式大差不差,都是链式加载。现代方式下Windows会在ESP分区建立Microsoft文件夹存放其efi文件。若为双系统,则UEFI会根据配置选择加载Windows的efi文件或是Linux的efi文件。
二、任务调度
注:不再区分进程、(内核)线程、任务。
1.调度算法
1.1调度器分类:
短期调度程序/CPU调度程序——选择进程(任务)上CPU。
长期调度程序/作业调度程序——选择进程上内存,控制内存中的进程数量。(Windows、Unix没有)
1.2调度算法评价指标:
吞吐量:单位时间完成任务的数量。
等待时间:进程在就绪队列等待的时间。多用平均值。
响应时间:用于交互式系统,提交请求到产生首次相应的时间。
1.3调度算法分类:
a.先到先服务(First-Come First-Served, FCFS)。
b.优先级调度:最短作业优先(Shortest-Job-First, SJF)/最短下次CPU执行(平均等待时间最少,最优)、抢占式最短作业优先(最短剩余时间优先):可能导致优先级低的进程饥饿,但可通过老化避免。
c.轮转调度:专门为分时系统设计。时间片过小会导致更频繁的上下文切换的时间浪费。时间片过大就不再是分时系统而是FCFS系统了。
d.多级队列调度:将就绪队列分为多个单独队列,每个队列有自己的调度算法。划分方法可以是前台与后台划分。队列与队列之间通常采用固定优先级抢占调度,如前台队列对后台队列绝对优先。进程无法中途更换队列。
c.多级反馈队列调度:同多级队列调度,但进程随时间会更换队列,这允许等待过长的进程被移到高优先级队列,防止饥饿。
2.线程竞争范围
1.分类:用户级线程通常与同一进程的其他线程竞争谁能上进程被调度执行,称为进程范围竞争(Process-Contention Scope, PCS),内核级线程与整个系统的内核级线程竞争上CPU,称为系统竞争范围(System-Contention Scope, SCS),所有系统都有SCS,采用一对一模型的系统,如Linux、Windows,只有SCS调度。
3.常见操作系统调度算法
a.Linux——完全公平调度程序(Completely Fair Scheduler, CFS):进程的优先级为0~139,其中分为两个范围。0~99用于实时任务,100~139用于普通任务。实时任务对于普通任务可抢占。实时任务之间根据优先级,低的可抢占高的。普通任务根据nice值映射到100~139的优先级。普通任务的优先级仅仅代表CPU时间分配的长短,不能抢占。
b.Windows——优先级多级反馈队列抢占调度算法:采用32级优先级,1~15级为可变类,16~31级为实时类,一个可变优先级的线程的每用完一个时间片便降低一个优先级等级但最终不低于优先级基值(可设置),当其等待的IO结束时其优先级会提升。