L8 CPU管理的直观想法
视频:B站
1.管理CPU最直观的方法:设置好PC就完事了
2.多道程序交替执行,也就是并发,就是CPU管理的核心思想
3.CPU真正工作起来的样子
4.运行的程序和静态程序是不一样的,因为运行中的程序会有一个称为PCB的数据结构,这个数据结构是用来记录当前程序运行的状态信息的。我们把运行中的程序称为进程。
5.进程和程序不一样的地方都会记录在进程的PCB里,下面是两者的一些区别:
6.操作系统是通过多进程图像来管理CPU的,多个进程一起向前跑的样子就是多进程图像
L9 多进程图像
1.课程开始时,先提几个问题:
1)什么是多进程图像?
2)操作系统为了实现多进程图像需要做些什么事情?
2.操作系统只需要把进程记录好,按照合理的次序推进(分配资源、进行调度),这就是多进程图像。
3.用户只关心有多少个进程在运行,操作系统则负责推进这些进程
4.多进程图像一直存在于操作系统启动到关机的这一整个过程中
5.main开始运行后,会执行一堆init函数,最后执行该代码:if(!fork()){init();}
,Linux就是启动了shell,Windows就是启动了桌面。接着shell就通过如下代码启动其它进程:
6.用户启动计算机就是启动了一堆进程,用户管理计算机就是管理一堆进程
7.进程是怎么组织和存放的?操作系统感知进程全靠PCB,所以就可以把PCB这个数据结构组织起来,通过不同的状态放在不同类型的队列中来管理进程:
这个图的意思是,有些进程正在执行,有些进程正在等待被执行,还有一些进程没有在等待执行的队列里,而是在其它等待队列里等待其它事件
8.进程状态图
而各种状态之间的转换的由OS来完成的。也就是说OS基于状态转换图对进程的状态进行转换
9.“来回切换”才是多进程交替的灵魂
10.切换进程的一个实例:
schedule()函数是非常重要的,它里面的那句pNew = getNext(ReadyQueue)
称为调度
11.交替的3个部分:队列操作+调度+切换
12.进程切换:
13.如果多个进程同时存在于内存中,可能会出现访问同一个地址的问题,解决这个问题的方法是限制对地址的读写,也就是地址空间分离,这也是内存管理的主要内容。
14.但是多进程图像也需要通过映射表来实现多进程地址空间的分离
15.多进程管理的核心在于进程同步(合理的推进顺序)
16.如何形成多进程图像
1)读写PCB,这是OS中最重要的结构,贯穿始终
2)要操作寄存器完成切换
3)要写调度程序
4)要有进程同步与合作
5)要有地址映射
L10 用户级线程
1.在这一页PPT中,老师说yield函数中最后那一句jmp 204
是可以删掉的。我在这里记录一下我的理解:如果删掉jmp语句后,yield函数就只剩两个赋值语句了。执行完第二个赋值语句,也就是esp=TCB1.esp后,栈就切回到了指令序列1中,也就是存着104和204的这个栈,我把这个栈称为栈1;接着执行到yield函数的右大括号,也就是作为函数结尾的那个大括号,然后就从栈1中弹栈,执行204处的指令,这样,就正常地在指令序列1中执行了
2.所谓线程,就是能够交替执行的一些指令序列
3.内核级线程的调度函数称为schedule(),用户级线程的调度函数称为yield()
L11 内核级线程
1.多处理器和多核的区别:
这里的MMU就是内存映射
2.内核级线程和进程实际上是非常像的,内核级线程加了映射表和资源后,就变成进程了。
L12核心级线程实现实例
1.描述符就是个指向段的指针
2.用TR选择子找到描述符,然后再用描述符找到段
3.在C函数中,越在后面的参数就越早压入栈中,所以位置越靠前的参数,越靠近栈顶
4.mem_map = 0的那一页就是空闲的页