标签:操作系统 队列 PCB 哈工大 进程 多线程 OS CPU
哈工大os学习笔记三(多线程)
文章目录
一、 从CPU管理引出进程
操作系统在管理cpu的时候引出了多进程
1.CPU的工作原理
取指执行
2.cpu计算速度与io不匹配(10^6:1)
io是机械设备动作非常慢,CPU是电子设备处理速度飞快
看到这个比例(100W条指令对应一条io),也就是说执行一次io的时间可以执行10^6次计算指令
极大地浪费了CPU的资源,CPU工作效率极低 只有50%
而实际上却是几十条计算指令对应一条io,CPU工作率接近为0
3.提高效率
接上,所以多线程,并行,并发,同时处理,中断,提升CPU效率(烧水去洗衣服,不能等着,这个时间可以打扫房间)
4.怎么实现多线程,并行,并发,同时处理
怎么进行切换?
修改pc指针,保护现场,恢复现场,利用栈,队列,PCB(Process Control Block)
5.进程的提出
CPU面对多道程序,在多个程序之间切换,就需要记录每个程序的现场信息(用PCB记录),以便再切回到一个程序时可以恢复。程序是静态的,但进程需要记录运行程序的现场信息等。可以简单地认为进程就是运行的程序。
小结
OS要管理CPU>OS要使用CPU>OS要取指执行程序>只执行一个程序CPU利用率极低>为了提升CPU利用率>CPU交替执行多个程序>进行交替切换就要记录程序的执行现场>引出动态的程序>引出进程。
利用进程来管理CPU,OS启动多个进程,让CPU去执行这多个进程,CPU就管理起来了,利用率就起来
二、多进程图像
包含两个部分: 什么是多进程图像
OS怎么实现多进程图像
大致讲解一个轮廓
1.多个进程使用CPU的图像
多进程图像就是多个进程交替推进的样子。对于普通用户来说,打开任务管理器,就可以看到各个进程的样子,比如对CPU、内存的使用情况等;对于操作系统来说,操作系统就会创建并维护好各个进程的PCB,保证多进程合理地向前推进。
linux/init/main.c中的main()函数完成内核初始化后执行if (!fork()) { init(); }代码,而init()函数就是启动一个shell(Windows启动一个窗口桌面),供用户使用。而shell中输入命令执行还是创建一个进程。自计算机开机到关机多进程图像就伴随始终,是操作系统的核心图像。
// shell的核心代码
int main(int argc, char * argv[])
{
while(1)
{
scanf(“%s”, cmd);
if(!fork())
{
exec(cmd);
}
wait();
}
}
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=c5822d99c01a47ce96c7d292b7ddaa99.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjQxMzg3,siz e_2,color_FFFFFF,t_70)
2.多进程组织(PCB队列+状态)
状态之间的转化就是进程的向前 推进
3.多进程交替(队列操作+调度+切换)
启动磁盘读写;
pCur.state = ‘W’; // 运行状态 -> 等待状态
将 pCur 放到 DiskWaitQueue; // 当前进程PCB pCur 进入等待队列(队列操作)
schedule(); // 调度+切换
schedule()
{
pNew = getNext(ReadyQueue); // 从就绪队列中调度一个进程,新进程的PCB是 pNew
switch_to(pCur,pNew); // 从 pCur 进程切换到 pNew 进程,当前现场信息存
// 入pCur,用pNew信息恢复现场(CPU各寄存器等),
// 这需要精细控制(汇编实现)
}
4.多进程带来的问题
如下图,进程1修改了进程2地址空间的数据,这很糟糕!怎么办?多进程的地址空间相互隔离,基本思想是通过映射表实现地址之间的分离(内存管理的核心内容),也再一次能看出内存管理也是为多进程服务的。
DPL CPL是保护OS的机制
每个进程有自己的映射表
5.多进程合作
下面例子是说进程1和进程2同时向空闲区域7放入要打印的东西,由于多进程交替执行,有可能进程1还没有把东西全部放到7区域,进程2就开始在7区域放东西了,导致进程1和进程2打印的东西揉在了一起。
下面以生产者-消费者问题展示下多进程的合作,本节课只是简单介绍,后续章节会细致讲解。
下面是一个导致错误的示例。
下面是解决错误的方法。
进程同步(合理的推进顺序)不是你想切就切,需要做到一定程度才能切。
————————————————
参考资料
[1] 中国大学MOOC《操作系统》李治军 哈尔滨工业大学
[2]https://blog.csdn.net/ccnuacmhdu/article/details/105473309
标签:操作系统,队列,PCB,哈工大,进程,多线程,OS,CPU 来源: https://blog.csdn.net/qq_43241387/article/details/119080631
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。