您的位置:首页 > 其它

大话操作系统(1)基本概念

2015-12-14 14:16 302 查看
December 14, 2015 1:54 PM

每一台计算机可以看做是一个工厂,时刻运行着。为了工厂稳定的运转,我们需要一些明确的规章制度以及一些管理员负责确保这些规章制度有序的执行,操作系统就是在扮演这样一个角色,确保计算机可以高效的完成我们交给它的任务。一个工厂里边有厂长(CPU),有负责车间的副厂长(内存管理),有负责库房的副厂长(外存管理),有负责机器维护及使用的副厂长(设备管理),在车间,为了提高效率,引进流水线操作(批处理),这些部分构成了操作系统的核心内容。

操作系统核心内容

CPU管理:处理机管理核心,CPU时间分配,即进程调度;

内存管理:分配内存给不同应用和用户

外存管理:分配磁盘给不同的应用和用户

设备管理:分配硬件设备给不同的应用和用户

批处理:提供一个无需人机交互的的处理任务,达到吞吐量最大化。

工厂的运行离不开电,有时候电力有限(单个CPU),一次只能供给一个车间使用,也就是说一个车间开工的时候,其他车间必须停工,单核CPU一次只能运行一个任务或者叫进程,进程要用的所有资源集合称为进程空间。

进程:进展中的程序,一个动态的概念,程序的静态的概念,进程是程序的一次执行。

但是,不同车间的生产任务都很重要,不能只让一个车间霸占着电力系统,这个时候解决的办法是,每个车间供电一段时间,不通车间轮流工作(多通道编程)。

多通道编程:CPu同时轮流运行多个进程

- 提高CPU的利用率

- 改善响应时间

进程状态:

- 执行->就绪(进程执行期间运行时间过长)

- 执行->阻塞(等待资源到达)

- 阻塞->就绪(资源就绪)

- 就绪->执行(CPU调度)

每一个车间有一个组长记录车间的相关信息,每一个进程有一个进程控制块(PCB),这个进程控制块存放的就是有关该进程的信息,摆阔寄存器、状态字、栈指针、优先级、信号、创建时间、所耗CPU时间等。

不同车间规模不一样,对电力的需求也不一样,电力资源的分配需要最大限度的满足所有车间的需求(进程调度)。

进程调度:选择下一个要执行的进程,极小化平均响应时间、极大化系统吞吐量。

- FCFS(先到先服务)

- 时间片轮转算法(每个进程轮流执行一小段时间)

- STCF(短任务优先算法)

- 优先级算法(按照一定优先级选择下一个执行的进程)

- 混合调度(结合上述几个方法)

不同车间可能是一个大的生产任务的不同部分,有时候不同车间需要协商讨论,然后合作完成任务。不同的进程也需要通信。车间和车间离的近可以直接对话,离的远需要打电话,进程之间通信也有不同的方式。

管道:相关进程通信或者需要知道名字。

套接字:一方为服务方,另一方为客户方

信号:内核数据结构,一个内核对象,进程电报,发送方将数据结构填好,发出中断请求,操作系统收到请求后查找接收方并通知接收方。

共享内存:共享大量数据,安全性脆弱。

消息队列:新消息在队尾,多个进程可以同时读写消息队列。

车间里除了机器还需要工人,不同的工人相当于不同的线程,使用Word时,实际多个线程同时工作,有的负责显示,有的负责输入,有的负责存盘,一起运转。

线程模型:

- 内核态线程:线程控制块位于内核,操作系统负责调度,简单

- 用户态线程:位于进程,用户负责线程调度

同步:多个线程读写同一个全局变量,一个线程在读写期间另一个对该变量作了修改,则程序很可能出错,甚至引发严重后过。同步确保程序执行的确定性,让所有线程按照一定的规则执行,使其正确性和效率有迹可循。

车间内不同工人有时候是独立工作的,有时候会有交集,比如使用同一台机器,或者使用同一个房间,这时候就构成了竞争。两个或多个线程执行多一段代码或访问同一资源的现象称为竞争。其中,可能造成竞争的共享代码段或资源称为临界区

有的地方可以容忍多个工人同时存在比如办公室,有的地方同一时间只允许一个人存在,比如厕所。同样,任何时刻都只有一个线程在临界区称为互斥,解决办法是用,一个人进来厕所将厕所锁上,出去的时候将锁打开,在临界区的线程用锁告诉别的线程,现在临界区正在使用,待会再来。

一个工人占用着厕所,那别的工人是在门口一直候着吗?显然不是,别的工人先去歇会,厕所里的工人出来叫他一声就好了。

所以线程用锁解决了线程同步的问题,然后让本来等待的线程先去睡觉,然后第一个线程结束后负责叫醒睡觉中的线程。

但这又会带来死锁问题。

第一个工人刚上完厕所,出门的一瞬间,第二个人正好扭头走了,第一个人不知道第二个人要上厕所,第二个人认为里边还有人,这样,第二个人会一直等第一个人去叫他,但第一个人永远不会去叫他,这种情况叫做死锁。

这个时候,我们一想,好麻烦,上个厕所真费劲,干脆花钱请一个看厕所的吧,这样,有什么事问他就知道了,这就是管程,管程使用锁和条件变量,条件变量控制执行的顺序。

有时候搬东西,需要好几个工人一起用力,不能大家东一下,西一下的,需要按照口号同时发力。

栅栏,等待所有线程到达后开始执行,多用于并行计算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: