操作系统
计算机系统由两部分组成:硬件和软件。硬件是计算机的物理设备,软件则分成了两部分:操作系统和应用程序。应用程序使用计算机硬件来解决用户问题,而操作系统则控制着用户对硬件的访问。
操作系统是一个非常复杂的系统,很难给出一个普遍认同的定义,但是根据操作系统的功能可以这样定义:操作系统是管理计算机硬件和软件资源的程序,它能够方便应用程更好的对计算机硬件和软件资源进行访问。操作系统的设计目标就是:有效利用硬件,更容易的使用资源 。
操作系统负责将其他应用程序装入内存并运行,但是操作系统自身也是程序,它也需要装入内存来运行,这个过程是怎么来实现的呢?
试想如果操作系统装入ROM写入计算机内存中,这个问题是不是就迎刃而解了。其实不然,这样内存中很大一部分就成了ROM(应用软件不能进行写入使用),这样内存的使用率就大大降低了,所以这种方案不行,现在主要采用什么解决方案呢?内存中有一小段是ROM,存储着称为自举程序的小程序。当计算机上电后,CPU计数器会被设置为自举程序的第一条指令,并执行程序指令,自举程序会将磁盘上的操作系统装入RAM内存中,装入完成后,CPU程序计数器被设置为RAM中操作系统的第一条指令,以此完成计算机操作系统的启动。下图为自举过程。
操作系统的演变
操作系统已经发展了很长一段时间,主要经历了批处理系统、分时系统、个人系统、并行系统、分布式系统以及实时系统。
批处理系统设计于20世纪50年代,批处理系统是用户将一批作业提交给操作系统后便不再干预计算机,如果成功,便会输出计算结果,如果不成功,则报错。因此批处理系统不具有交互性,它的设计是为了提高CPU的利用率;
分时系统:多个键盘或者显示器终端连接着一台计算机,允许多个用户与计算机进行交互,分时操作系统将CPU的时间分成若干个时间片,轮流为各个用户服务。
操作系统十分复杂,扮演着大总管的职责,现代操作系统至少包含以下四种功能:内存管理、进程管理、设备管理和文件管理,那么操作系统如何同外界(用户)交互呢?这里不同的操作系统有不同的用户界面,比如window的用户界面称为窗口,Linux或者unix是命令行解释器。
内存管理
随着内存容量的不断激增,计算机所处理的程序和数据也越来越大,内存的分配的矛盾也就越来越突出。操作系统内存管理分为:单道程序和多道程序
单道程序中,小部分内存用来装载操作系统,大多数内存用来转载单一程序,这种配置下,整个程序都装入内存运行,运行结束以后由其他程序取代。这样的内存管理的弊端就是:1、程序必须全部载入内存才能运行,如果内存比程序小,无法运行;2、CPU和内存的利用率很低,当程序等待输入设备或者把数据输送到输出设备时,造成CPU不能为其他程序服务。
多道程序下,同一时刻可以装入多个程序并同时被执行,CPU轮流为其服务。多道程序下,按照程序是否在内存和硬盘之间发生交换分成了交换范畴和非交换换筹,非交换范畴下主要是分区和分页两项技术;交换范畴主要是请求分页和请求分段两项技术
什么是分区调度呢?内存被分成了不定长的几个区,每个分区保存一个程序。CPU在各个服务之间交替服务,它由一个程序开始,遇到较慢速度的输入/输出操作时,CPU保存当前程序的最后一条指令,转入下一程序,如此反复执行下去。这种技术存在的弊端:1、每个程序装入内存,占用连续的地址,一定程度上提高了CPU的利用率,但是分区的大小需要有分区管理器预先分配,分配的大小就很难把握;
什么是分页调度呢?分页调度提高了分区调度的效率,在分页调度下,内存被分成了大小相等的若干部分,称为帧。程序被分成了大小相等的部分,称为页。页和帧一般是一样大小。分页调度下,程序在内存中不必是连续存储的,提高了内存的利用率。分页调度一定程度上提高了效率,但是整个程序仍然必须全部载入内存中。
什么是请求分页呢?分页调度不需要将程序装载到连续的内存中,但仍需要将整个程序装入内存中运行,那么请求分页调度改变了后面的限制,在请求分页调度中,程序被分成页,但是页可以依次载入内存,运行,不必整个程序的所有页转载如内存,运行。简言之,内存可以同时转入多个程序的页,运行。
什么是请求分段呢?类似于分页调度的是分段调度,分页调度下,程序被分成了相等的大小,而分段调度,则是程序被分成了主程序模块和子程序模块,内存还是分成了相等的段。
请求分页调度和请求分段调度意味着当程序运行时,一部分程序驻留在内存中,一部分驻留在硬盘中,这就意味着:10MB的内存运行10个程序,每个程序3MB,那么一共30MB,任意时刻只有10MB在内存中,剩余20M在硬盘上。这里实际就是10M内存但却有30M的虚拟内存(虚拟内存在硬盘上)
虚拟内存 物理内存
进程管理
程序、作业和进程三个概念,程序就是一段稳定的指令,存储在硬盘上,它可能成为作业;作业是从程序中选中被执行,到其运行结束并再次成为一个程序的过程,就是作业。进程是一个执行中的程序,将作业装入内存中就变成了一个进程。下图是程序、作业和进程的状态图:程序被操作系统选中成为作业并且成为保存状态,直到被载入内存之前都是保持状态,当内存可以整体或者部分载入这个程序是,作业转成就绪状态,并变成进程,在内存中保持该状态,直到CPU运行它,这时变成运行状态。
将一个作业或者进程从一个状态改变成另一个状态,进程管理器使用了两个调度器:作业调度器和进程调度器,实现上使用了队列的方式
进程调度容易出现两个问题:死锁和饿死两个状态
设备管理器
文件管理器