当计算机只运行一个程序时,只需将所有的资源(CPU、内存、磁盘等)分配给这一个程序就行;当计算机同时运行2个或以上程序时,操作系统就需要充当一下角色:
- 资源分配器
- 资源隔离与秩序维护者
- 细节屏蔽者
一. 资源分配器
计算机的硬件就那么多,多个同时运行的程序就会争抢资源,那不就乱套了?这时,操作系统可以合理地给各个运行起来的程序分配资源,从这个角度,可以将操作系统理解成一个资源分配器。
- 操作系统对CPU的分配
操作系统对CPU的分配采用的是“分时”的策略,就是各个进程轮换使用CPU;即:进程A使用一会儿,然后暂停,进程B又使用一会,再暂停…;每一次使用的时间超级短,所以咱们看这些软件好像在同时运行;而进程使用CPU的顺序就是操作系统的进程调度。 - 操作系统对内存和磁盘的分配
操作系统对内存和磁盘的分配采用的是“分块”的策略,就是将内存或磁盘分为一块一块的,再分给每一个进程;除此之外,虚拟内存是操作系统在内存的使用上做的精彩的发明。点击链接可以看我之前的文章:磁盘与内存的亲密关系 -磁盘缓存和虚拟内存
二. 资源隔离与秩序维护者
多个同时运行的程序之间不能相互影响,也不能随意访问其他程序的内存区域等,这些都是需要操作系统进行资源隔离;
另外,复杂的功能也需要多个进程合作完成,所以程序之间有时也需要进行通信,比如进程间通信等;这时操作系统必须提供必要的同步以及互斥机制,确保程序对共享资源的访问以及程序的运行顺序符合程序员的预期。
因此从这个角度看操作系统又是资源隔离与秩序维护者。
三. 细节屏蔽者
我们知道真正完成计算任务的是硬件,hardware,而硬件本身通常是非常难以编程的,因为这非常的细节、非常琐碎,程序员在读写文件时大概率不想关心要读写的数据到底保存在磁盘的哪个盘面、哪个柱面、哪个扇区上,也不想关心该使用什么样的机器指令可以控制磁盘的读写、怎样平衡好读写速率与磁盘寿命等等,你需要的是两个read/write函数就能读写文件这种抽象概念(实际上从磁盘的角度来说根本不存在文件这种概念)。
这时操作系统的作用就非常明显了,操作系统对上层应用屏蔽了底层的这些细节,让程序员可以将注意力放在自己的领域上。
因此,从这个角度看操作系统更像是一个细节屏蔽者,它提供的一个重要的功能就是:抽象,Abstraction。
四. 说明
本文为公众号:码农的荒岛求生,中的文章《为什么计算机需要操作系统?》的读书笔记,如有错误,请兄弟们指正,大家一起进步!