admin @ 08-07 13:48:59   全部文章   0/125

中山团购大全操作系统之进程与线程-刘小绪同学

操作系统之进程与线程-刘小绪同学
参考资料:刘欣课堂笔记
现代操作系统第二章操作系统的抽象
????操作系统,通过几个基本的抽象概念来实现两个功能。(1)防止硬件被失控的程序滥用;(2)向应用程序来提供简单一致的机制来控制复杂又大不相同的硬件设备。
????I/O设备被抽象为文件;主存和I/O设备又被抽象为虚拟存储器;CPU在程序员眼里就是一堆指令集;处理器和虚拟存储器再被抽象为进程;如果再在进程的基础上加上操作系统,那就可以抽象成虚拟机。
进程
????现代计算机会在同一时刻做很多事情,计算机上所有可运行的软件(包括操纵系统),被组织成若干顺序进程无限茶几,简称为进程。一个进程就是正在执行的程序实例,包括程序计数器、寄存器和变量的当前值。进程和程序之间的关系
???斯里查潘?用一个场景来描述进程和程序之间的关系。
????在外地读书的你,回家过生日。妈妈为了能让你过一个快乐的生日,准备给你做生日蛋糕。但是妈妈也不会做呀,就买了一本食谱,按着上面的做法来做。做蛋糕所需要的鸡蛋、水、糖、面粉等原料在厨房已经备好了。???川娇群?你因为一个人呆在客厅无聊,想看一会儿电视,但是翻遍了客厅都没有找到遥控器。你的第一反应就是:“妈,遥控器放哪里了?”这时妈妈先记录一下自己做蛋糕做到那一步了,然后再跑出来给你找遥控器。找到李海洋阿訇遥控器后,你安稳的在客厅看电视,妈妈继续回厨房做蛋糕。
?樊兵???在上面的故事中,妈妈就是处理器;做蛋糕的食谱就是程序;鸡蛋、水等就是输入数据。进程就是妈妈阅读食谱,取来各种原料以及烘制蛋糕的总和天眼刑警。你找不到遥控器了,妈妈需要保存当前的进程状态,跑出来给你找遥控器,这实际上就是从做蛋糕进程切换到了更高优先级的找遥池早早控器进程。遥控器找完了,再回到做蛋糕进程从刚才停下来的地方继续做蛋糕。
????一个进程在内存中的逻辑布局如下图。
进程的层次结构
???切西瓜电脑版?一个进程可以创建另一个进程,当进程创建了另一个进程后,父进程和子进程就以某种形式继续保持关联医道丹途,子进程也可以创建更多的进程,这样就形成了层次结构。在UNIX中,进程都属于以init为根的一棵树,init即用户登录成功创建。但是在windows中,采用的是句柄的形式,即当一个一个进程创建另一个进程之后,它会获得控制该进程的句柄。然而,它也可以把这个句柄交给别的进程,所以就不存在层次结构了。进程的状态
????进程有三种状态,分别是:(1)运行态,这时进程实际占用CPU;(2)就绪态,可以运行,但是现在CPU正在忙着执行别的进程;(3)阻塞态,这种情况下不能运行,除非某种外部事件发生。进程之间的调度由操作系统来进行(需要注意不是CPU,CPU只是一个按别人命令行事的部件),当从一个进程切换到另一个进程时,需要保存当前进程信息野德新之助,比如PC、用到的寄存器、寄存器中的值、打开的文件等等,这些信息保存在PCB(进程控制块)中。如下图是进程之间的状态转换。
线程
????操作系统中每个进程都有一个地址空间和一个控制线程。事实上,经常在同一个地址空间中并行运行着多个控制线程,这些线程就像分离的进程。
?稻叶浩志???为什么要在进程里面再分出多个线程?用一个例子来解释说明,现在有一个文字处理程序,那么它的主要功能需要包括:(1)显示图形;(2)读取用户的键盘输入;(3)自动定时保存文档。如果只有一个主线程,那么自动保存文档的时候就不能接收键盘的输入,因为只有一个线程。那么为什么不考虑用三个进程来实现呢?使用进程的最大问题就是进程之间的信息共享,虽然能实现共享数据,但是开销会大很多,所以解决办法就是用线程。线程比进程更轻量级乔伊波伊,创建一个线程比创建一个进程要快10~100倍。
????一个进程至少有一个线程,如果是多线程的进程,那么每个线程都需要维护自己的寄存器和堆栈;但是数据、代码、文件是共享的。线程所拥有的资源很少,只有自己运行所必须的堆栈和寄存器,基本可以说没有资源。进程是操作系统进行分配资源的基本单位;线程是调度的基本单位。
线程的实现
????第一种实现方式就是完全在用户空间来实现,这种方式实现有个优势就是龙丹丹,完全不用内核的介入卢永仁,切换会比较快。但是也有一个巨大的缺陷,就是阻塞问题;因为操作系统只看到进程,假设一个进程中的某个线程在读写文件,进入了阻塞,中山团购大全 那么操作系统就会认为整个进程都进入了阻塞状态。操作系统就把整个进程都放到阻塞队列中去了,就意味着里面的线程都阻塞了,这对于其他没有读写文件的线程是很不公平的陆文宇,因为人家完全可以运行的。这样实现的缺点就是,操作系统只能看到进程,一个线程阻塞,整个进程都阻塞。

强占勾心娇妻????很明显就能想到,在内核中去实现线程。这样就能解决上面出现的问题了,不会因为由于某个线程的阻塞而导致同一个进程的其他线程被阻塞掉。但是由带来了新的问题,就是每次创建进程都有在内核创建相关的线程,这样的开销会比较大柳未来。

???穿越九福晋?自然而然就会想到吴辰岑,两种方式混合实现,兼具各自的有点,java中的虚拟机就是采用的这种方式。

????最后插播一段小话:计算机相关的概念,有一些是自相矛盾的。比如一个系统同时要求快速和安全,这就是自相矛盾的,要获得安全就必须做很多的验证,但是验证一多了就慢了,所以需要进行折中,上面的线程实现也是如此南明风雨。为了兼具各自的优点,又不想带来太多的不足,都根据实际情况进行折中,CPU指令集的复杂程度也是如此戴雨诺,看你的机器要用在什么样的场合而选择复杂指令集还是精简指令集。
——END——

返回顶部