• 精选
  • 会员

单个程序(进程)也可以多任务

2019年5月4日  来源:小智雅汇 作者: 提供人:laogan45......

8、单个程序(进程)也可以多任务

人类的欲望是无止境的,很快就出现了新情况, 举个例子来说吧,我有一个兄弟,是个文字处理软件, 他和我不一样, 他有界面, 人类在用的时候能看到, 这实在是很幸福, 不像阿甘总是在背后默默工作,几乎无人知晓。

这哥们有个智能的小功能,就是在人类编辑文档的时候能自动保存, 防止辛辛苦苦敲的文字由于断电什么的丢掉。

可是这个功能导致了人类的抱怨, 原因很简单,自动保存文字是和IO打交道,那硬盘有多慢你也知道, 这个时候整个进程就被挂起了, 给人类的感觉就是: 程序死了,键盘和鼠标不响应了! 无法继续输入文字, 但是过一会儿就好了。

并且这种假死一会儿就会出现一次(每当自动保存的时候), 让人不胜其烦。

系统党委研究了很久, 他们当然可以用两个进程来解决问题, 一个进程负责和用户交互, 另外一个进程负责自动保存, 但是,这两个进程之间完全是独立的,每个人都有自己的一亩三分地(地址空间), 完全互不知晓, 进程之间通信的开销实在是太大, 他们没有办法高效的操作那同一份文档数据。

后来还是劳模阿甘想出了一招 : 可以采用多进程的伟大思想啊!

把一个进程当成一个资源的容器, 让里边运行几个轻量级的进程, 就叫线程吧, 这些线程共享进程的所有资源, 例如地址空间、全局变量、文件资源等等。

但是每个线程也有自己独特的部分, 那就是要记住自己运行到哪一行指令了, 有自己的函数调用堆栈,自己的状态等等, 总而言之,就是为了能像切换进程那样切换线程。

通俗了解计算机系统运行原理?

拿我那个哥们的情况来说, 一个进程保存着文档的数据, 进程中有两个线程, 一个负责和用户交互, 另外一个专门负责定时的自动保存, I/O导致的阻塞就不会影响另外一个了。

注意,这两个线程都能访问进程的所有东西, 他们两个要小心,不要发起冲突才好。这是人类程序员要做的事情了, 不归我们管。

阿甘的建议被采纳了, 其实这几乎是唯一的解决问题方式了, 但是由谁来管理引起了激烈争吵。

解决的方案是用户空间的进程可以创建线程(用户线程), 内核也会创建线程(内核线程), 用户线程映射到内核线程上。

通俗了解计算机系统运行原理?

问题基本解决了,但也带来了新的问题,我们的系统也变的越来越复杂, 尤其是进程之间的通信和线程之间的同步, 会那些程序员们带来无穷无尽的烦恼。

9、了解历史可以更深刻地了解我:“存储程序”让电脑变得通用和友好

最早的编程是通过开关、重新插拔连接电缆的方式让电脑具有新的功能来执行不同的任务,这种特殊的程序叫“外部程序”,效率极低,且极不方便和友好。

如果程序切换以后, 想再次运行上一个程序, 还得重新把开关和电缆操作一遍, 让人抓狂。

如果能把程序存储下来该多好, 需要运行了,找到它运行就行了。

存储程序, 这并不是一个全新的想法, 当然,想把程序存储下来,需要定义一下机器的“指令集”, 这样各种各样的程序才用指令集中的指令描述出来, 方便存储。

冯·诺伊曼提出了一个全新的计算机体系结构:

通俗了解计算机系统运行原理?

在这个结构中一个程序由若干指令组成, 在运行之前, 要被“放到“某个地方, 你把这个地方称为存储器(内存), 可以把内存比喻成包含一个个格子的东西, 每个格子里放一条指令。

一个叫控制器的东西去读取“格子“中这个程序的第一条指令,分析指令到底要做什么事情, 然后运算器去执行这个指令, 执行完第一条就接着执行第二条, 如此一直运行下去......

控制器和运算器是如此紧密的在一起工作,你决定把它叫做处理器(CPU)。

很多程序不仅仅是简单的运算,大部分情况下还要把运算的结果放回到内存的“格子”中, 现在有个问题困扰着你, 内存中已经有指令了, 也要把数据放到这里吗?

经过谨慎的思考,你们做了一个艰难的决定:把指令和数据分区放到同一个内存中! 这样一来处理器在同一时刻,要么是在读取指令, 要么是在存取数据, 两件事不可能同时进行, 这自然带来了一些性能的问题。

但是你坚信这样的设计结构简单,成本低,容易实现,一定要坚持。

为了做人机交互, 还得有输入设备和输出设备来做辅助。

计算机科学家们根据电子元件的特点, 抛弃了ENIAC所使用的10进制, 转而使用二进制, 采用布尔代数的逻辑运算, 这极大的简化了电路的设计。

后来冯·诺伊曼根据这个设计写了一篇草稿论文,叫做《First Draft of a Report on the EDVAC》,这份论文广为流传, 深深的影响了下一代计算机的设计, 人们把遵循这个结构的计算机称为冯·诺伊曼计算机。

一个冯·诺伊曼计算机被抽象成5大组成部分: 控制器、运算器、存储器、输入设备、输出设备。 将近70过去了, 它仍然统治着现代计算机 , 时间证明了这是一个伟大的体系结构 。

而冯·诺伊曼结构提出后, 计算机这么多年来基本没什么变化, 无非就是追究速度更快, 容量更大, 显示更好而已, 不知道量子计算机是不是未来的突破?

各种各样不同功能的程序写好以后,和程序使用的数据一起存放在计算机的存储器中,即“存储程序”;然后,计算机按照存储的程序逐条取出指令加以分析,并执行指令所规定的操作。

这样一来,原来的专用计算机变成了通用的计算机,不管你是计算导弹弹道的,模拟核爆炸的,还是计算个人所得税的, 统统都可以在一台机器上运行。

参考《码农翻身》

-End-

计算机系统 / 多任务

如涉及版权,请著作权人与本网站联系,删除或支付费用事宜。

0000