目录
1.1初识操作系统
思考题:
1.2操作系统的功能和定义
思考题:
1.3操作系统发展史
思考题:
1.4分时技术
思考题:
1.5典型操作系统类型
1.1初识操作系统
常见桌面级别的四大操作系统:Windows、Mac OS、Linux、UNIX。
微软公司最早的操作系统是Windows1.0,首次在PC上尝试图形界面,于1985年发行。Windows1.0是基于MS-DOS的操作系统,开机时先加载MS-DOS。
再后来便是家喻户晓的Windows XP,发行于2001年8月25日,其分为家庭版(Home)和专业版(Professional)。
Mac操作系统,是苹果公司基于Unix内核的图形化操作系统,是苹果产品专属的操作系统。
Linux之RedHat,是RedHat以GNU/Linux为核心发行的操作系统。
没有安装操作系统的计算机能运行程序吗?能!能运行COMS设置程序!但是普通用户不能正常使用!
所以由此引出:计算机必须安装操作系统,才能让用户正常使用计算机!
操作系统的基本功能如下:
1.提供操作界面/可视化操作界面。
2.控制程序运行。在Windows下可以双击快捷方式、或者可执行文件本身打开程序;在命令行模式下输入程序的名字即可打开程序...这些都是操作系统需要管理的任务。
3.控制多个程序并发运行。一个计算机当中并不只有一个程序在运行,绝对会有多个程序在"一起"执行,通俗的讲,CPU只有一个,如何让用户感觉这些程序像是在同时一起运行是操作系统的任务。
4.提供系统设置/配置。因为没有操作系统用户便不能正常使用计算机,但是有了操作系统之后我们想修改硬件、系统的某些功能或者配置信息,这时操作系统必须提供这样的功能。
5.提供工具/管理软件。因为用户与计算机的交互是通过操作系统完成的,所以操作系统有必要提供一些工具或者管理软件。
6.存取信息。我们通常把我们的资料、文档放在磁盘当中,但是用户不能直接与计算机交互,所以操作系统必须提供信息存取的手段。
7.存取保护。现代操作系统大多都是多用户的,有时候当前用户在磁盘存放的文件并不想让其他用户修改、读取等等,操作系统必须提供存取保护、访问权限之类的功能。
总而言之,操作系统的基本功能是提供操作界面、控制程序运行、管理系统资源、配置系统参数、监控系统状态、提供工具软件集合的一款软件!是的,操作系统是一款软件!
思考题:
1.我们自己编译的程序运行时需要操作系统提供哪些支持?
代码编译之后生成程序,这个程序如何存放必须由操作系统来解决,操作系统必须提供管理文件的手段。程序如何启动也必须由操作系统来支持,是通过命令行打开程序?还是通过双击鼠标呢?程序启动后,它一定会占用内存资源,那么内存资源该如何分配也是操作系统应该解决的问题。当代码中有输出语句时,操作系统必须提供一种手段与显示器交互。如果代码当中存在死循环的语句,操作系统也必须保证该程序不会独占CPU资源而让其他程序无法运行。最后便是程序退出时,操作系统必须进行"善后"工作。
2.没有安装操作系统的计算机的启动过程和结果是怎样的?
通电之后,计算机会启动自检程序,对部分硬件进行检测,如果有问题便提示用户;对外部设备进行初始化和检测;加载引导程序,引导DOS操作系统启动(如果有)。
3.常见的虚拟机软件(例如VMware)能不能理解为操作系统?
答案是不能。虚拟机软件运行在操作系统之上,即使它看起来像是一个独立的计算机能够运行其他的操作系统,但其本质还是一个用户程序。它并没有上面讲过的操作系统的基本功能。
1.2操作系统的功能和定义
操作系统功能之一:进程管理
1.进程控制:操作系统能够控制进程的创建、暂停、唤醒、撤销等。
2.进程调度:操作系统持有调度策略,为每个进程分配优先级。
3.进程通信:操作系统有必要让进程之间产生联系。
操作系统功能之二:内存管理
1.内存分配:操作系统有必要合理的为每个任务分配内存。
2.内存共享:必要时,为了让某些任务产生通信,操作系统必须提供内存共享的机制。
3.内存保护:有时候我们希望任务与任务之间互不干扰,操作系统就必须有对应的手段保护每个任务占有的内存。
4.虚拟内存:这是现代操作系统通用的管理内存的手段,它能够提高各个任务的执行效率。
操作系统功能之三:设备管理
1.设备的分配和调度:与管理内存,当用户需要使用外部设备时,操作系统必须合理的分配和调度这些设备。
2.设备的无关性:试想一个问题,更换磁盘、硬盘、内存,似乎并不需要用户完成什么工作,因为操作系统具有为用户屏蔽底层硬件的功能。
3.设备的传输控制:操作系统不单单只为用户服务,设备与设备之间有数据流动时,操作系统也必须提供控制、管理手段。
4.设备驱动:通常是操作系统暴露给用户的接口,使得用户能够轻松设置设备参数。
操作系统功能之四:文件管理
1.存储空间管理:操作系统必须知道存储空间有多少、还剩多少、某个文件能不能存储等等。
2.文件的操作:文件通常存放在磁盘上,操作系统必须提供一些方式让用户能够轻松地操作这些文件(例如打开、删除等等)。
3.目录的操作:在Linux中,也把目录看成文件。
4.文件的目录的存取权限管理:上面说过,操作系统有可能是多用户的,某些用户并不想让其他用户对自己的文件进行读、写操作,所以操作系统必须提供一些权限、保护文件的机制。
由此可见,操作系统是一个大型系统程序,它为用户提供接口,方便用户控制、使用计算机;它负责为应用程序分配和调度软硬件资源,并控制与协调应用程序的并发活动,帮助用户存取和保护信息。
那么操作系统位于计算机的哪个位置?或者说,操作系统在计算机体系当中,处于什么地位?
操作系统位于用户层和硬件层之间,起到承上启下的作用。
思考题:
1.你有没有遇到过因为内存太小而导致程序运行失败的情况?
现代操作系统理论上不会发生这种情况。只可能发生因为内存过小而导致操作系统、程序运行的缓慢甚至出现死机的情况,但不会出现程序、操作系统崩溃。
1.能否用C语言写一个耗尽内存的程序来证明上面的结论?
int main()
{
int cnt = 0;
while (true)
{
char* p = (char*)malloc(100 * 1024 * 1024);
if (p == NULL)
{
return 1;
}
printf("第%d次申请内存 100M 内存成功\n", ++cnt);
}
return 0;
}
这张图可是费了九牛二虎之力才截下来的图,很幸运,我的电脑和上面答案描述的一样,程序运行只会变慢,并不会崩溃(截图程序加载了两分钟)。
1.3操作系统发展史
用户需求的提升和硬件技术的进步是操作系统发展的两大直接动力。
计算机硬件发展的四个典型阶段:
1.电子管时代[1946 -> 1955]
2.晶体管时代[1955 -> 1965]
3.集成电路时代[1965 -> 1980]
4.大规模集成电路时代[1980 -> 至今]
根据这些时间线,硬件的速度、容量、稳定性、可靠性都得到逐步提高。
操作系统发展的四个典型阶段:
1.手工操作(无操作系统) -> 50年代早期
2.单道批处理系统 -> 50年代
3.多道批处理系统 -> 60年代初
4.分时系统 -> 60年代中
第一台数字电子计算机ENIAC就是典型的手工操作时代,由人工代替操作系统。
手工操作(没有操作系统)时代的特点:
1.结构特点:硬件方面仅由电子管、接线面板(按钮/开关)构成;程序方面,直接暴力使用二进制编码作为程序,直接在纸带或者卡片上打孔,由人工投递给计算机。
2.使用特点:程序的准备、启动、结束工作,全部由人工负责,繁琐且耗时。
3.缺点:效率低下,CPU有效运行时间极低,CPU的处理速度相较于人工是相当快的,所以一个小时当中有59分中在被人工处理,只有1分钟真正占用CPU资源。用户独占,当时的计算机就类似于当今只有一台电脑的网吧,前面的用户未处理完任务,后面的用户便不能进去"上网"。缺少交互,用户交代计算机的工作人员完成某些任务,然后一直等,直到结果出来。
单道批处理系统时代的特点:
1.工作特点:计算机管理员事先将多个作业输入到磁盘当中形成作业队列,然后由操作系统一次自动处理队列中的每个作业,操作系统负责作业队列的每个作业的装入->运行->撤出->装入...循环。程序的装入和撤出由操作系统负责完成,在一定程度上实现了自动化,效率明显提高。程序运行完毕之后,通知用户取运行结果。单道批处理系统的出现实现了自动批量化处理作业,但仍然是单道、依次、串行处理程序。
2.实例:1955年也就是晶体管时代的开始,IBM推出第一台晶体计算机7094,由人工将程序放入读卡机,然后操作系统自动加载到主机,然后运行结果输出到外设。
3.单道批处理系统CPU的利用情况:因为是串行处理程序,所以外设与CPU交替空闲和忙碌,不管是CPU还是外设,它们的有效利用率都很低。
多道批处理系统时代的特点:
1.定义:在内存中存放多道程序(注意与单道批处理系统的区别,单道批处理系统的队列放在磁盘上),当某道程序因为某种原因不能继续运行而放弃CPU时,操作系统便调度零一程序投入运行,这样便尽可能地使得CPU忙碌,提高系统效率。
2.特点:内存同时存放多道程序;宏观上并行;微观上串行。
3.缺点:作业处理时间长,原因在于每个作业的IO完成后,可能无法及时回到CPU运行,一定程度来讲作业的处理时间确实变长了。交互能力差,在作业运行期间,用户是不能与计算机发生交互的。运行过程不确定,作业的IO完成之后能不能立即回到CPU需要看其他作业是否不再占用CPU。
思考题:
1.在多道批处理系统中尝试不断增加程序的数量,系统的效率会不会持续增加?结果如何?
首先,效率不一定会增加。当CPU处于空闲状态或者离满负荷还有一定差距时,增加程序的数量确实会增加系统的效率;但是当CPU达到满荷状态时,再尝试增加程序数量,就会降低系统的效率。造成这两种差别的原因在于:多道批处理系统在微观上还是串行的,当程序的数量合理时,能够让CPU一致处于忙碌状态,但是当程序多起来的时候,许多程序依然还是要等待CPU空闲,并且每个程序的处理周期会增加,所以效率变得更低。
1.4分时技术
60年代的硬件有两个重大进展:
1.中断技术:CPU支持收到外部的中断信号后,停止当前工作,转去处理发送该中断信号的外部事件,处理完毕后回到原来工作的中断处,继续处理原来的工作。
2.通道技术:实现了专门处理外设与内存之间的数据传输的处理机。也就是说,在某些场景下,某些工作不需要CPU去处理。
同时,用户需求的提高以及多终端计算机的出现也刺激了操作系统的发展:
1.事务性任务的需求突然涌现:在此之前,多道批处理系统往往不能与用户发生交互,只能待CPU处理完成后取其结果。但是用户在这时希望能与正在运行的作业发生交互,这就要求操作系统能够支持发生交互,并且响应速度不能太慢。
2.许多用户要求能够支持多任务、多用户的并发执行。
3.多终端计算的出现:多终端计算机是一个高性能主机+多个终端组成的,其主机负责运算,它具有CPU和内存;而多个终端仅有输入和输出功能。主机采用分时技术轮流为每个终端服务,让每个终端都感觉到自己是"独占"主机。
分时技术:
1.概念:主机以很短的时间片为单位,把CPU轮流分配给每个终端使用,直到全部作业运行完毕。由于时间片很短(假设为50ms),在终端数量不多的情况下(假设为5个),每个终端都能很快重新获得CPU,它只需要等待一个周期,使得每个终端都能得到及时响应。等待周期 = 时间片 * 终端数量,也就是所,终端1运行50ms之后暂停运行,等待450ms之后又可以继续运行。
2.特点:多路调制性:能够让多用户联机使用同一台计算机;独占性:让每个用户都感觉自己"独占"计算机;交互性:每个作业不需要等待太长的时间即可进行下一次运行,及时响应用户的请求。
正是在这样的背景下,由美国国防部组织的一个大型分时系统的实践项目Multics,1962年由MIT、BELL、和G.E参与研发的一种共用计算服务系统,在研发过程中,诞生出了世界上第一个实用化的分时操作系统、第一个真正体现操作系统领域各种先进概念和技术的操作系统——UNIX。
UNIX的出现带来了革新和创造:实现了操作系统的可移植性、实现了硬件无关性、引进了"特殊文件"的概念,即把外设看作文件,实现对外设的统一管理。这些标准对后来的操作系统意义重大。
UNIX的发展历史:
思考题:
1.分时技术的时间片设置的大小,应该根据哪些因素来考虑?是尽量大好还是尽量小好?
时间片的设置需要根据系统的总体框架来考虑,例如用户的响应时间、系统一次支持的用户数目、CPU的指令周期、中断处理时间、程序运行现场的保护和恢复时间等。所以时间片的设置应该合理,不能太大也不能太小。如果时间片太小,操作系统就要花费大量的时间去切换作业;而时间片太长,就会导致等待周期变长,影响用户的交互体验。
1.5典型操作系统类型
操作系统的进一步发展都属于分时系统的衍化:
1.微机操作系统:随着大规模集成电路的发展,进入个人计算机(PC机)时代,1973诞生出第一个用于PC机的操作系统CP/M,它具有良好的层次结构,使用BIOS把操作系统和硬件分隔,使得操作系统有更好的可移植性,并且易学易用。典型的PC机代表便是1976年苹果的Mac OS操作系统和Macintosh系列电脑,Mac OS是首个配有图形界面和鼠标操作的操作系统。
随后在80年代出现了微软的MS DOS操作系统,它属于磁盘操作系统,支持单用户单任务,预装在IBM的PC机上。随后在1985年11月出现了微软Windows1.0操作系统,1992年4月发表Windows3.1,1993年5月发表Windows NT,随后逐渐出现我们常用的微软操作系统Windows 95、CE、98、2K、XP、Windows 7、Windows 10......
2.实时操作系统:在某些场景下要求操作系统能够完成事实事务,例如军事、工业控制、智能仪器等,要求操作系统能够及时完成优先、紧急任务的处理,它强调作业完成的时限。实时操作系统又分为硬实时系统,对时间要求非常严格,例如火炮控制系统、航空航天领域、制导系统、工业控制、汽车电子系统......然后便是软实时系统,对时间要求并不是太严格,而是要求尽量快,例如网络视频直播、实时互动的网游、通讯......
3.嵌入式操作系统:它可以约等于实时操作系统,但它的范围、定义要比是实时操作系统宽泛。嵌入式系统可以搭载嵌入式操作系统,但不是必要的。例如手机是一个典型的嵌入式系统,为了能与用户互动,就必须搭载嵌入式操作系统,典型的便是Andriod和IOS。当然,Linux也可以被应用于嵌入式系统,只不过与桌面不一样的是,它可以被裁剪,也就是说用于嵌入式系统的Linux可能要比桌面的Linux少一些模块。
4.网络操作系统:它就是在普通操作系统之上增加了网络通信和网络服务,就比如我们现在使用的UNIX、Linux、Windows等等,网络操作系统具有透明存取、存取控制的功能。
适合学习的小型开源操作系统:
Minix OS由荷兰大Vrije大学计算机教授Andrew S.Tanenbaum编写,其名下的《现代操作系统》便是围绕Minix OS编写。Minxi OS等于Mini UNIX,它开放源代码给教学和科研人员,因为其只有12000行左右的代码,非常易于学习和掌握,其采用了先进的微内核架构,并且还是类UNIX操作系统。其官方网站为:Minix3。
推荐学习的大型开源操作系统:
Linux由芬兰的赫尔辛基大学生Linus Torvalds编写,在1994年3月正式发布Linux 1.0。迄今为止,它的代码非常庞大,有大约1100万行。其源码下载网址为:The Linux Kernel Archives。注意,开源的代码是免费的,但是发行版不是免费的。典型的便是用于大型服务器的RedHat,以及众所周知的Ubuntu。