操作系统 - 基本概述【0】
主要是记录学堂在线的操作系统课的一些知识点。
一、什么是操作系统?
首先操作系统是一个极其复杂的软件,它的外延和边界不是很固定,所以所以很难有一个完整、精确、公认的定义。但是可以从功能和特点上来介绍操作系统,从而对操作系统是一个什么样的软件有一个更深入的理解。
从功能上来说,可以分为对上和对下,对上就是对于用户和应用程序来说,操作系统是一个控制软件,可以管理应用程序、为应用程序提供服务(比如I/O服务)、杀死应用程序。对下对于操作系统的内部管理来说,操作系统是一个资源管理器,管理各种各样的资源(CPU、内存、外设)以及分配资源。
操作系统是一个控制程序
- 一个系统软件
- 控制程序执行过程,防止错误和计篡机的不当使用
- 执行用户程序,给用户程序提供各种服务
- 方便用户使用计算机系统
操作系统是一个资源管理器
- 应用程序与硬件之间的中间层
- 管理各种计算机软硬件资源
- 提供访问计算机软硬件资源的高效手段
- 解决资源访问冲突,确保资源公平使用
二、操作系统架层次结构
- 硬件之上,对硬件进行控制管理。
- 应用程序之下,为应用程序提供服务支撑。
例如,如果你是用户,那么你只关心应用程序的使用,而不会关心系统应用和操作系统的实现。操作系统就夹在硬件和系统应用之间,对应上面说的,类似于一种作为软件和硬件之间的管理/协调者的地位。
上图表明,操作系统就是用来隔离软件和硬件的,对上层(软件)提供常见的资源,例如线程,对下层则是一种管理者的角色,管理硬件上的操作。
总的来说,操作系统本身就相当于是一种软件,具体而言可以按下图这样分类:
操作系统的组成:
Linux、Windows、Android的界面属于外壳(Shell),而不是内核(kernel ),Kernel是我们的研究重点,在Shell之下.
shell就是操作系统对外提供的各种接口和服务,windows命令行也是shell的一种,属于命令行式的shell。
操作系统和外部(用户)的关系:
Kernel(内核)-操作系统内部组件,包括:
- CPU调度器(如进程、线程管理)
- 物理内存管理
- 虚拟内存管理
- 文件系统管理
- 中断处理与(I/O)设备驱动
OS Kernel(操作系统内核)的特征:
- 并发
计算机系统中同时存在多个运行的程序,需要OS管理和调度 - 共享
多个应用可以“同时”访问资源;互斥共享即在微观上,应用访问的资源是不同的,互斥的,某个应用访问的资源不能让另一个应用去访问 - 虚拟
利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务 - 异步
程序的执行不是一贯到底,而是走走停停(比如只有一个CPU却要执行多个任务),向前推进的速度不可预知,但只要运行环境相同,OS需要保证程序,运行的结果也要相同
三、为什么要学习操作系统?
操作系统是一门综合课程—结合许多不同的课程,学习它是对与自己能力的重要提升。
- 程序设计语言
- 数据结构
- 算法
- 计算机体系结构
学习 材料
- 操作系统概念和原理,源代码
学习技能
- 操作系统的设计和实现
已经有了很多操作系统,例如∶Windows、Linux还有学的必要吗?本科生应该学吗?
为什么要学习操作系统:
- 操作系统还在不停的发展、在工控等各种领域有强烈的需求!
- 操作系统很酷、很有用、有挑战。
- 操作系统知识很底层,掌握好对于其他类似的东西也可以做到触类旁通,能力也会得到提升。
操作系统: 计算机科学研究的基石之一
- 计算机系统的基本组成部分
- 由硬件的发展和应用需求所驱动
- 学术和工业的持续推进
前沿资讯 | 主要代表 |
---|---|
工业界 | 微软、谷歌、Facebook... |
苹果:iphone.ipad...以OS为核心 | |
学术界 | ACM |
IEEE | |
USENIX | |
国内:CCF | |
*会议 | SOSP(每两年,1967- ...) |
USENIX(每两年,1994 - ...) |
操作系统为什么复杂?
- 实际操作系统代码量巨大,如:Windows XP有4500万行,不可能完全掌握目标是要理解其核心内容。
- 操作系统管理并发(CPU调度等·)
- 操作系统代码管理原始硬件,时间依赖行为,非法行为,硬件故障都需要考虑
- 操作系统是一个核心软件,代码必须是高效的,是低耗CPU、内存、磁盘的
- 操作系统出错,就意味着机器出错,操作系统必须比用户程序拥有更高的稳定性
- 操作系统是系统安全的基础
从更高层次的一个角度来看
1、操作系统需要权衡:
- 空间(内存)与时间(CPU)
- 性能和可预测性
- 公平和性能
2、硬件方面,操作系统需要∶
- 良好的硬件管理
- 合理的资源分配
例如∶硬盘速度跟CPU、内存相差很多,操作系统需要协调处理
四、如何学习操作系统?
不应该仅仅是把概念和原理背下来,把题做完就够了。应该尽量去动手实践,阅读源码,最好能够去coding(编码)。
我听到的我会忘记
我看到的我能记住
只有我做过的我才能理解
没有练习、实战和总结,学了白学。
五、操作系统实例
面向桌面,面向服务器,面向数据中心等等,各种各样的不同用途
UNIX家族
Linux家族
Linux与Unix是同一类,他们的API是兼容或者相似的(向教授说的……我对Unix的了解基本为零,查了查,只能确认的是Linux是Unix的模仿——这点从他的名字可以看出来,Linux Is Not UniX,即Linux,程序员界的烂俗递归笑话——所以我目前还不能确定是不是确实是兼容的,不过既然是模仿,那么大概率是相似的了。不过知乎上有人提到了是兼容的,如下图)。
Windows家族
操作系统的演变
六、操作系统历史
七、操作系统的结构
1、简单操作系统: MS-DOs(1981~1994)不分模块的单体内核
2、分层结构
分层结构使得操作系统的可移植性成为了可能。ucore系统就是分层结构。
分层结构的缺陷在于随着层次的增加依赖关系会越来越复杂,导致越来越臃肿,效率越来越低。因此提出了:
3、微内核结构:微内核的设计,尽可能把内核功能移到用户空间
现在大部分系统都是微内核和分层的混合体。
4、外核结构
相当于只让内核起到一种隔离硬件软件的作用,负责分配资源,但是具体怎么处理资源则由程序来决定。原来操作系统的功能就通过操作系统库来实现。有点类似虚拟机的结构。
5、VMM(虚拟机管理器)(解决硬件资源过剩)
此时管理器负责资源隔离,操作系统负责资源的管理。