进程与线程
L8 CPU管理的直观想法
管理CPU的时候引出的多进程图像,操作系统通过多进程管理CPU。
管理CPU,首先应该使用CPU。话说什么是CPU。
CPU是如何工作的?冯诺依曼说了要把程序放在内存中,然后设置一个地址,CPU就把地址放在地址总线上,内存就把50的代码传到CPU。
取址执行。
CPU就是自动的取指-执行。
管理CPU最直观的方法,PC初值设置就行了
提出问题:问题尼玛多了,所谓地址也就是二进制码,为什么可以自动累加。
CPU如何获取数据并处理的?CPU如何将负责的程序找出各种连线。看起来实际上CPU在其时间单位上只处理一件事?
把fprintf(I/O指令)变成计算程序。所以说平时在用MATLAB的时候打印文字和图片时执行会变慢很多。存磁盘时候需要驱动磁臂,这完全是一个机械结构。执行I/O操作非常慢。
工作的时间和停止的时间基本上是相等的,所以PC的利用率是50%。但是正常的编程的话,CPU利用率趋近于0。回来的过程就是中断。中断软中断被称为系统调用。
多道程序交替执行
里面的寄存器怎么保护?交替的时候寄存器的内容应该被覆盖?压栈保存?
CPU应该并发,交替执行,这是怎么做到的?时间:26分钟
需要记录一些信息,记录切出去时程序的状态信息。
运行的程序与静态程序是不一样的,运行的程序必须记录一些信息。
。。。。。。这课讲的是真好啊。。。。。。
进程就是运行的程序。就和区别静态程序的。。。。
L9 多进程图像
让CPU高效工作必须让其多进程工作。
上层用户看到就是进程有三个,第一个进程可能是PPT,第二个进程是WORD等等。。
而下层就是将这些进程记录好,每个进程都创建一个结构体PCB
创建了shell,用户执行一个命令也是创建了一个进程。用户用PC就是创建进程,管理计算机就是管理多进程。
多进程如何组织?操作系统感知进程就是PCB,
多个结构体,操作系统都知道在哪。
怎么具体的切换多进程?这里面是非常复杂的。
pNew 通过getNext(调度)选择下一个进程,这也是非常讲究的,每年也在更新,里面有很多算法。这边先介绍两个简单的。FIFO就是将排队的第一个,公平但是没有优先级。
把CPU保存在结构体中,这边是汇编代码,C语言不行不能实现精确的控制。
多进程都放在内存中,会出现问题。就把进程2的东西修改了。为什么不能用DPL,因为只有DPL在OS中才能为0,这边都是用户侧都是3.
通过映射的方法,这边是内存管理的内容。映射表是内存管理的核心。
访问的【100】都是真实的内存,是映射表
每个进程都有一个映射表
多进程在内存中共存。才能实现多进程,
有人向里面放东西,有人取东西。假设进程1,2都看到7这边可以放,但是交替执行导致1没放完,2就也往里放,所以7这边就乱套了。
buffer是共享缓存区,缓存区满了就不能往里放了
交替执行会出现乱套的情况。
切换的时候必须要合理的推进顺序