一个学期的《操作系统》课程就要结束了,在这个学期,通过老师的传授和课本以及课下的阅读学习,让我对计算机操作系统的一些实现原理和简单的操作过程有了基本的了解。
在学习操作系统之前,我在前面几个学期计算机导论,计算机组成原理,C语言等课程,这些课程让我了解了计算机硬件如处理器、随机访问存储器、输入输出设备、磁盘驱动器等部件的组成及工作原理,于是我就曾想过自己亲手组装,或者在脑海中虚拟组装一下也可以,把这些互相分离的计算机大部件连接起来,万事俱备,然后通上电,期待着显示器出现想要出现的画面。然而,并非如愿以偿,因为事实上,还缺少了一个重要的部分——软件,更确切的说——操作系统。
经过近乎一个学期的学习,我知道了,操作系统是一个由许多软件构成的庞大的程序集合,它不仅仅单是为用户提供友好界面,更重要的是它还管理着计算机系统的全部硬件资源、软件资源及数据资源,从而使计算机各个组成部件能够顺利高效地、资源最大限度地发挥作用。
当计算机开机后,CPU一加电,通过内存中的硬件系统检测和初始化程序完成后,便调用操作系统引导程序,从此,便将此计算机彻底交由操作系统来控制。操作系统是一个需要在CPU上运行的软件,它可以为其他应用软件提供支持,不过,作为此计算机的主宰,每一种操作系统都对它所管理的操作系统提出了种种的格式上的要求。比如每次我在我的计算机上下载应用软件的时候还要看是否能够兼容我的Windows10。
课堂上老师结合书本,很详细的介绍了操作系统主要工作原理。并发、共享、虚拟、异步,是OS共有的基本特征,它们使计算机能够高效的整合利用计算机资源,其实也是OS设计的基本要求。微内核OS结构是当前普遍一种OS设计。由于操作系统越来越强大、复杂,便只保留OS内核中最基本的部分,其他部分根据模块分层,相互独立,视作为进程来交互信息。
进程是操作系统进行资源分配的基本单位,它的基本信息和运行状态是由进程控制块(PCB)来描述和管理的,即所谓的创建进程和销毁进程,其实都是对PCB的操作。进程和线程是有区别的,比如说,打开一个浏览器,即是创建了一个进程,而浏览器里面有很多线程,如http请求线程、事件响应线程等等。线程的并发执行使得在浏览器中点击一个新链接而发起 http请求时,浏览器还可以响应用户的其它事件。线程和进程的并发执行可以提高系统资源利用率和系统吞吐量。
并发执行的进程之间,必须能够相互协调,即按照一定的规则或时序共享系统资源,那么便引入了进程同步机制。经典的进程同步问题有“生产者——消费者”问题、“读者——写者”问题、“哲学家进餐”问题等。如使用信号量机制实现的生产者消费者问题需要对其进行很多控制,确保共享资源能够互斥有效利用,利用管程,即代表抽象共享资源的数据结构及对其实施操作的一组过程,可以很好的解决资源管理问题。
如果同步问题的处理不当甚至会导致系统死锁,这就需要处理机调度算法来进行资源分配。死锁是指两个以上的进程在执行过程中,因为争夺共享资源而造成的一种互相等待的忙等现象。由于资源是互斥访问的,程序就不能继续运行,这就产生了一种特殊现象死锁。最具代表性的避免死锁算法,是Dijkstra的银行家算法。银行家算法必须保证分配资源前,系统有足够的资源分配给进程,且分配之后,系统是安全状态的。
在先前计算机组成原理课程中,我了解了存储器的组成及工作原理,但是,存储器的管理及虚拟内存技术,使我对存储器有了更进一步了解。虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存进行容量扩充的存储器系统。一个虚拟存储器,采用地址映射,将虚拟地址分成存储页面号和偏移量两个部分。为了保证虚拟存储器最大效率的利用,良好的页面置换算法如最佳置换算法、FIFO算法、LRU算法等,是直接影响到系统性能的重要保证。段页式则在扩展内存的基础上,进一步实现了数据的共享和保护。
《操作系统》是作为我专业的核心课程的,对于它的认知仅仅一学期的时间是不够的。实现一个很简单的操作系统大概也需要六七千行代码实现,而单靠一个人实现一个近乎完美的操作系统几乎是不可能的。所以,我们实验是对OS功能的部分简单模拟实现。
未来我想自己动手写一个简单的操作系统,这需要更加深入的学习汇编语言、计算机组成原理、微机原理及C语言数据结构如链表等方面的知识,同时,也需要阅读其他介绍操作系统的书籍资料。
“师父领进门,修行在个人”,回顾这一个学期的学习,有很大的收获,也有不小的遗憾。接下来,我知道,计算机这个大黑匣子,还有很多东西需要我去学习、去应用、去探索。