文章目录
资料链接:
百度云链接:https://pan.baidu.com/s/1h2aEk6A_DGpXkZvRtNmeUw 提取码:qoll
视频:https://www.bilibili.com/video/BV1d4411v7u7?p=1
博客笔记:https://blog.csdn.net/SakuraA6/article/details/108810916
计算机操作系统
1.CPU管理
操作系统的用户态,内核态。
中断是进入从用户态进入内核态的唯一方法。
2.多进程图像
进程:进行(执行)中的程序。
一个cpu,多个进程同时运行:并发。(一起出发,交替执行)
PCB:process control block
多进程组织:PCB+状态+队列
线程管理的问题
线程切换后,对另一个线程的物理映射地址数据进行修改会导致出错?地址映射表
线程配合工作,如何组织秩序,保证对共享数据操作的正确性?共享缓冲区,进程同步
进程同步
给counter加锁。
3.用户级线程
进程:每个进程都有各自的资源和指令序列。
线程:操作的资源是一样的,指令序列不一样。
*线程切换:只需要切换PC指针,而不需要切换资源(PCB或上下文),比较快。
*指令切换:线程;指令切换+资源切换:进程。
cpu切换:cpu的运算速度要远快于处理io的速度。在处理io时,cpu可以转而去执行其它运算,提高cpu的利用率。
每个线程有自己的返回地址栈,用一个TCB数据结构来存储栈的地址。执行yield()后,需要从当前栈中弹出返回地址。esp是一个所有线程都能访问到的数据,esp=TCB2.esp完成了栈的切换。
用户级线程的核心:
每个线程有自己的栈,TCB。切换的时候首先切换TCB,再切换栈。
创建的时候将要切换的那个pc指针放到自己的栈中,然后再创建好TCB。将来在要切换的时候,首先通过TCB切换到相应的栈,然后从栈中弹出pc指针。
create
4.内核级线程
切换进程实质上就是切换内核级线程。
用户级线程切换是内核级线程切换的一部分。
对于用户级线程,对内核是不可见的。多核处理器要发挥作用,需要将多个用户级线程分配到不同的核心上进行处理,这涉及到核心级线程的切换。
用户级线程切换:切换TCB,然后根据TCB中的指针,切换到对应用户线程栈。
核心级线程切换:切换TCB,然后要切换一套栈,内核栈要切换,用户栈也要切换。
5.内核级线程的实现
6.CPU策略的调度
CPU时间长度,|-----CPU区间-----|-------IO区间-------|,在一个线程执行过程中,cpu执行的时间和io操作的时间。
设置优先级可以保证周转时间比较小。如短作业优先。线程整体满意度较高。但只有优先级,可能会导致线程饥饿,响应时间长。
时间片轮转可以保证响应时间,避免线程饥饿而得不到响应。但是只有时间片轮转又不能保证任务优先级。
折中解决方案:结合动态优先级和时间片轮转。
7.一个实际的schedule函数
8.进程同步与信号量
Processes Synchronization and Semaphore
使进程间的合作变得合理有序。
只有信号,不能决定是睡眠还是唤醒,如上面的无法判断当前有两个生产者进程。
信号量:可用资源的数量。
9.信号量的临界区保护
用临界区保护信号量,用信号量保证进程同步。
对信号量的共同修改会出现问题。
一共涉及三个变量,flag0,flag1,turn。turn要么为0要么为1,两个flag即使同时为true,也只有一个能进入。并且也无法形成两个同时处于等待的状态
10.死锁
11.内存使用与分段
基地址放在PCB中。cpu取址操作过程中要进行地址翻译。
每个进程的PCB表都需要记录这样一个段表, 就是LDT。(Local Descriptor Table)
操作系统进程的段表就叫做GDT表。(Global Descriptor Table)
PCB中记录着LDT表(各个段的基址)。
12.内存分区与分页
程序分段,内存分页。
磁盘 —> 内存 —> CPU
编译后的程序,多个段 —> 加载到内存 —> 执行
.C —> 进程LDT, PCB —> PC, IR, LDTR
出现任务:
1.维护已分配分区表和空闲分区表
2.空闲分区的分配选择算法
用程序中的段内偏移地址计算得到页号和页内偏移地址。
根据页号找到物理页框号。
页框号就是段基地址,加上页内偏移量,得到物理地址。
13.多级页表和快表
最近使用的放在了快表中,提高时间效率。快表在CPU的寄存器中,速度非常快,一定程度上弥补了多级页表访存次数增加的缺点。但是TLB成本很贵。
14.段页结合的实际内存管理
两次地址翻译:cs, ip 翻译到虚拟内存,虚拟内存再经过多级页表翻译到物理页号和偏移地址。
15.请求调页内存换入
内存换入:磁盘到内存
内存换出:内存到磁盘
16.内存换出
17.I/O与显示器
PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,
操作系统将所有外设都做成文件。
操作系统操作外设的三个部分:
通过out指令发命令,通过文件形成统一的文件视图,进行中断处理。
1.根据设备描述文件中的inode信息,决定了cpu应该走哪条路进行输出。
2.将一个out指令,层层向上封装,用文件封装起来。
3.进行中断处理。
18.键盘
在处理键盘扫描码为F12时,将*写入到缓冲队列。
19.生磁盘的使用
让磁盘工作起来 --> 熟磁盘(有文件系统)
柱面:一个磁道从上到下形成的一个柱面。
磁头:盘面。
扇区:一个盘面从内到外的磁道中含有的扇区数量看作是一样的。(Sections)
第一层抽象:根据盘块号访问磁盘。block --> cyl, s, h
第二层抽象:电梯算法。
20.从磁盘到文件
比起用盘块号来使用磁盘;用文件来使用刷盘更符合用户常识和习惯。
用户对文件字符流进行增删改;由文件系统完成字符流到磁盘盘快集合的映射。
21.文件使用磁盘的实现
22.目录与文件系统
一个磁盘从一台电脑换到另一台电脑,操作系统都能够以相同的方式将磁盘中的文件呈现给用户。那么磁盘需要对存储在其中的数据进行一定的组织管理。
引导块:mount 挂载。