引入
CPU的调度策略和多进程图像
操作系统是管理硬件的软件
通过系统接口(系统调用)
如何实现?
两条图谱
IBSYS→OS/360→MULTICS→Unix→Linux
CP/M→QDOS→MS-
DOS→Windows→Unix→System→MacOS→iOS
取指执行
文件视图 I/O设备
内存
操作系统感知进程、组织进程全靠PCB
用PCB放在不同队列中,用状态来推进多个进程进行状态转换
调度选择下一个进程,得到下一个进程的PCB,然后根据CPU将CPU
的寄存器和存放在进程中的信息进行互相的交换
通过映射表
进程管理连带内存管理形成多进程图像,只有共存了才能交替执行
一个栈到一套栈,两个栈到两套栈
保留了并发的优点,避免了进程切换的代价
多进程合作
一种特殊整型变量,用来sleep、wakeup
靠临界区保护信号量,靠信号量实行进程之间的同步
将程序放入内存中,PC指向开始地址
交换(swap)
是将各段分别放入内存
将程序的各个段载入到相应的内存分区中
物理内存希望用页
程序员希望用段
*p = 7
往控制器中写柱面C,磁头H,扇区S,缓存位置
第一层抽象
第二层抽象
第三层抽象
一个盘块 = 两个扇区
第四层抽象
操作系统
第一部分:什么是操作系统
什么是操作系统?
如何使用操作系统?
如何开机?
第二部分:操作系统历史
多进程视图
文件视图
第三部分:管理硬件
管理CPU
用户态(用户段)
内核态(内核段)
CPU怎么工作?
怎么管理?
设好PC初值
怎么高效管理?
并发
管理硬件的软件
管理CPU 多进程视图
CPU程序
计算指令
*p=7指令
open、read等
disk
display
keyboard
引入“进程”的概念
PCB
多进程图像
如何使用CPU?
如何充分利用CPU?
分配资源、进行调度
多进程如何组织?
多进程如何交替?
多进程如何影响?
线程
用户级线程
内核级线程 内核线程switch_to的五段论
中断入口(进入切换)
中断处理(引发切换)
schedule
switch_to(内核栈切换)
中断出口(第二级切换)
CPU调度策略
FCFS
SJF
如何使用内存?
进程同步 信号→信号量
临界区
死锁
定义
保护原则
互斥进入(基本原则)
有空让进
有限等待
一次只允许一个进程进入的该进程的那一段代码
多个进程由于互相等待对方持有的资源而造成的谁都无法执行的情况
成因
资源的互斥
已占有,再去申请
环路等待
不可抢占
死锁预防
首先让程序进入内存
运行时重定位
程序载入后还需要移动
是将整个程序一起载入内存中么?
引入分段
进程段表(LDT)
GDT表
GDT+LDT
内存怎么割?
固定分区
可变分区 管理
核心数据结构
请求分配
释放内存
再次申请
引入分页
内存分区导致的内存效率问题
提高内存空间利用率
引入多级页表与快表
多级页表
快表
页目录表(章)+页表(节)
TLB(一组相联快速存储,是寄存器)
段页结合的实际内存管理
虚拟内存
如何实现?通过swap分区管理
内存换入
内存换出
内存管理的核心:基于虚拟内存的分段分页,用换入和换出
实现虚拟内存
使用请求调页实现
页面置换
FIFO页面置换
MIN页面置换
LRU页面置换
准确实现 时间戳
准确实现 页码栈
近似实现 将时间计数变为是和否
I/O与显示器
形成文件视图
发出out指令
行程中断处理
键盘
发出写命令
向CPU发出中断
读数据到内存
磁盘 生磁盘的使用
最直接的使用磁盘
通过盘块号读写磁盘
从CHS到扇区号,从扇区到盘块
多个进程通过队列使用磁盘 磁盘调度
FCFS
SSTF
SCAN
C-SCAN
使用流程
进程得到盘块号,算出扇区号
用扇区号磁盘请求(make req),用电梯算法
进程唤醒(sleep_on)
磁盘中断处理
处理磁盘请求(do_hd_request)算出C H S
hd_out调用outp(...)完成端口号
文件 建立字符流到盘块集合的映射
连续结构实现文件
链式结构实现文件
索引结构实现文件
实际系统是多级索引
文件系统,抽象整个磁盘 引入目录树
路径名 文件的FCB
inode
评论0