当前位置:文档之家› 操作系统课程设计心得 (2)

操作系统课程设计心得 (2)

在学习操作系统之前,我在前面几个学期学习了数字电路、计算机组成原理课程,这些课程让我了解了计算机硬件如处理器、随机访问存储器、输入输出设备、磁盘驱动器等部件的组成及工作原理,但是把这些互相分离的计算机大部件连接还缺少了一个重要的部分——软件,更确切的说——操作系统。

经过学习,我知道了,操作系统是一个由许多软件构成的庞大的程序集合,它不仅仅单是为用户提供友好界面,更重要的是它还管理着计算机系统的全部硬件资源、软件资源及数据资源,从而使计算机各个组成部件能够顺利高效地、资源最大限度地发挥作用。

首先,我在操作系统实验中学习了大量的专业知识如:
一、作业调度
程序:程序是指静态的指令集合,它不占用系统的运行资源,可以长久地保存在题盘中。

进程:进程是指进程实体(由程序、数据和进程控制块构成)的运行过程,是系统进行资源分配和满度的一个独立单位。

进程执行程序,但进程与程序之间不是对应的。

通过多次运行,一个程序可以包含多个进程:通过调用关系,同进程可以被多个程序包含(如一个DLL文件可以被多个程序运用)。

作业:作业由一组统一管理和操作的进程集合构成,是用户要求计算机系统完成的一项相对独立的工作。

作业可以是完成了编译、链接之后的-个用户程序,也可以是各种命令构成的一个脚本。

作业调度:作业调度是在资源满足的条件下,将处于就绪状态的作业调人内存,同时生成与作业相对应的进程,并为这些进程提供所需要的资源。

作业调度
适用于多道批处理系统中的批处理作业。

根据作业控制块中的信息,检查系统是否满足作业的资源要求,只有在满足作业调度的资源需求的情况下,系统才能进行作业调度。

二、同步与互斥
原语:不可中断的过程。

互斥:某一资源同时只允许一个访问者对其进行访问,具有唯性和排他性。

同步:在互斥的基础上(大多数情况),通过其他机制实现访问者对资源的有序访问。

临界资源:互斥共享的资源称为临界资源。

临界区(Critical Section):在程序中,对临界资源访问的代码部分称为临界区。

临界资源是互斥访问资源,即在任意时刻只允许一个进程访问共享资源。

临界区包含两个操作原语:进人临界区和离开临界区。

互斥量(Mutex):互斥量与临界区相似,只有拥有互斥对象的进程(或线程)才具有访问资源的权限。

由于互斥对象只有一一个,因此任何情况下此共享资源都不会同时被多个进程访问。

当前占据临界资源的进程在任务处理完成后应将拥有的互斥对象释放,以便其他进程在获得互斥对象后能够访问资源。

互斥量比临界区复杂,因为使用互斥量不仅仅能够在同一-应用程序不同进程中实现资源的安全共享,还可以在不同应用程序的进程之间实现对资源的安全共享。

互斥量包含三个操作原语:创建一个互斥量、释放一个互斥量、等待互斥量。

三、银行家算法
死锁:多个进程在执行过程中.因为竞争资源会造成相互等待的局面,如果没有外力作用,这些进程将永远无法向前推进。

此时称系统处于死锁状态或者系统产生了死锁。

安全序列:对于一个进程序列P... P},如果对于每个进程P(1≤i≤n)以后尚需要的资源数量不超过系统当前剩余的资源量和所有进程P(j<i)当前占用资源之和,则称序列P,.,P,}为一个安全序列。

安全状态:如果存在一个由系统中所有进程构成的安全序列P, " P..则系统处于安全状态,安全状态定是没有死锁发生。

不安全状态:在当前形式下不存在安全序列,则系统处于不安全状态。

银行家算法:如果将操作系统的资源视为银行家管理的资金,进程向操作系统请求分配资源就好像用户向银行家贷款。

操作系统可以像银行家- 样,按照规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量,则按当前的申请量为其分配资源,否则就推迟分配。

当进程在执行中继续申hean44本h由涛咨酒断县不招过了利金盗源的总量.如果资源数未超过剩余资源总量,则进行分配,否则推迟分配。

四、内存管理
定义空闲分区结构体,用来保存内存中空闲分区的情况。

其中size属性表示空闲分区的大小,start_addr表示空闲分区首地址,next指针指向下一个空闲分区。

定义已分配的内存空间的结构体,用来保存已经被进程占用了内存空间的情况。

其中pid作为该被分配分区的编号,用于在释放该内存空间时便于查找。

size表示分区的大小,start_addr表示分区的起始地址,process_name存放进程名称,next指针指向下一个分区。

对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。

当空闲分区初始化;失败时,要进行相应的提示。

菜单包括,设置内存大小,选择分配算法,新建进程,终止进程,显示当前内存使用情况,退出六个选项。

各个选项完成其名对应的功能,在程序中通过相应的函数实现对应的功能。

该模块完成在内存空间中申请一块空间供进程使用的功能,通过输入进程大小系统先查看内存空间中是否有足够的空间供其进行申请,若无,显示分配失败相应信息,否则在空闲内存分区块中选择最先的一块进行分配,若内存空间不足则继续向下查找,空闲内存分区的顺序通过三种算法给出。

分配内存时,要指定进程的首地址和大小,并对内存空闲分区的大小做相应的修改。

通过输入对应pid完成对相应进程的终止功能,将其内存空间设置为空闲分区,若与已有空闲分区的地址连续则进行空闲分区的合并。

对空闲分区按照首地址的大小从小到大进行排序;对空闲分区按照内存块的大小从小到大排序;对空闲分区按照内存块的大小从大到小排序。

其次,在我的了解中当计算机开机后,CPU一加电,通过内存中的硬件系统检测和初始化程序完成后,便调用操作系统引导程序,从此,便将此计算机彻底交由操作系统来控制。

操作系统是一个需要在CPU上运行的软件,它可以为其他应用软件提供支持,不过,作为此计算机的主宰,每一种操作系统都对它所管理的操作系统提出了种种的格式上的要求。

比如每次我在我的计算机上下载应用软件的时候还要看是否能够兼容我的Windows10。

进程是操作系统进行资源分配的基本单位,它的基本信息和运行状态是由进程控制块(PCB)来描述和管理的,即所谓的创建进程和销毁进程,其实都是对PCB的操作。

进程和线程是有区别的,比如说,打开一个浏览器,即是创建了一个进程,而浏览器里面有很多线程,如http请求线程、事件响应线程等等。

线程的并发执行使得在浏览器中点击一个新链接而发起http请求时,浏览器还可以响应用户的其它事件。

线程和进程的并发执行可以提高系统资源利用率和系统吞吐量。

并发执行的进程之间,必须能够相互协调,即按照一定的规则或时序共享系统资源,那么便引入了进程同步机制。

经典的进程同步问题有“生产者——消费者”问题、“读者——写者”问题、“哲学家进餐”问题等。

如使用信号量机制实现的生产者消费者问题需要对其进行很多控制,确保共享资源能够互斥有效利用,利用管程,即代表抽象共享资源的数据结构及对其实施操作的一组过程,可以很好的解决资源管理问题。

如果同步问题的处理不当甚至会导致系统死锁,这就需要处理机调度算法来进行资源分配。

死锁是指两个以上的进程在执行过程中,因为争夺共享资源
而造成的一种互相等待的忙等现象。

由于资源是互斥访问的,程序就不能继续运行,这就产生了一种特殊现象死锁。

最具代表性的避免死锁算法,是Dijkstra 的银行家算法。

银行家算法必须保证分配资源前,系统有足够的资源分配给进程,且分配之后,系统是安全状态的。

在先前计算机组成原理课程中,我了解了存储器的组成及工作原理,但是,存储器的管理及虚拟内存技术,使我对存储器有了更进一步了解。

虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存进行容量扩充的存储器系统。

一个虚拟存储器,采用地址映射,将虚拟地址分成存储页面号和偏移量两个部分。

为了保证虚拟存储器最大效率的利用,良好的页面置换算法如最佳置换算法、FIFO算法、LRU算法等,是直接影响到系统性能的重要保证。

段页式则在扩展内存的基础上,进一步实现了数据的共享和保护。

诚然,《操作系统》是作为我专业的核心课程的,对于它的认知仅仅一学期的时间是不够的。

实现一个很简单的操作系统大概也需要六七千行代码实现,而单靠一个人实现一个近乎完美的操作系统几乎是不可能的。

所以,我们实验是对OS功能的部分简单模拟实现。

在我的预想中我想自己动手写一个简单的操作系统或者组装一台真正意义上自己的电脑,不过这需要更加深入的学习汇编语言、计算机组成原理、微机原理及C语言数据结构如链表等方面的知识,同时,也需要阅读其他介绍操作系统的书籍资料,而以我目前的知识储备来看,显然是不够格的。

正所谓老师带我们入门接触,后面的更进一步都靠自己,回顾这次实训课的学习,有很大的收获,也有不小的遗憾。

接下来,我知道,计算机这个大黑匣子,还有很多东西需要我去学习、去应用、去探索。

相关主题