Week1-操作系统概述-Coursera北大操作系统课程-个人笔记
Week1 操作系统概述
本笔记是基于Coursera的北大操作系统课程,感觉这是一门很基础很概念的课,看似没什么高深的数学内容,但其实每个部分都包含很细致的算法精华,有兴趣的同学可以根据相关概念的关键字扩展学习。笔记大部分内容是老师讲义PPT的内容,图片也大多来自视频截图。如有错误,欢迎大家讨论和指正。
1. 操作系统做了什么?
以c++的helloworld程序为例
1).用户告诉操作系统执行helloworld程序(如何告知?)
2).操作系统:找到程序的相关信息,检查其类型是否是可执行文件;并通过程序首部信息,确定代码和数据在可执行文件中的位置并计算出对应的磁盘块地址(可执行文件格式?)
3).操作系统:创建一个新的进程,并将helloworld可执行文件映射到该进程结构,表示由该进程执行helloworld程序
4).操作系统:为helloworld程序设置CPU上下文环境,并跳到程序开始处(假设调度程序选中helloworld程序)
5).执行helloworld程序的第一条指令,发生缺页异常。
6).操作系统:分配一页物理内存,并将代码从磁盘读入内存,然后继续执行helloworld程序。如果程序很大,则会产生多次缺页异常,多次读入内存。
7).Helloworld程序执行puts函数(系统调用),在显示器上写一字符串。
8).操作系统:找到要将字符串送往的显示设备,通常设备是由一个进程控制的,所以,操作系统将要写的字符串送给该进程。
9).操作系统:控制设备的进程告诉设备的窗口系统,他要显示字符串,窗口系统确定这是一个合法的操作,然后将字符串转化成像素,将像素写入设备的存储映像区
10).视频硬件将像素转换成显示器可接受的一组控制数据信号
11).显示器解释信号,激发液晶屏
12).然后在屏幕上就可以看到“hello world”了。
2. 操作系统的定义与作用
2.1操作系统的定义
操作系统是计算机系统中的一个系统软件,是一些程序模块的集合:
1).它们能以尽量有效、合理的方式组织和管理计算机的软硬件资源;
2).合理地组织计算机的工作流程,控制程序的执行 并在程序执行的过程中向程序提供各种各样的服务功能;
3).使得用户能够非常灵活、方便地使用计算机,使整个的计算机系统能够高效率地运行
关键词:
1).有效:系统效率,资源利用率
CPU利用率是否高?I/O设备是否忙碌?
2).合理:各种软硬件资源的管理是否公平合理
不公平、不合理会产生什么问题?
3).方便使用:两种角度,用户界面与编程接口。
2.2 操作系统的作用
1).资源的管理者→有效
操作系统管理什么资源?
硬件资源:CPU、内存、设备(I/O设备、磁盘、时钟、网卡等)
软件资源:磁盘上的文件、各类管理信息
操作系统如何管理资源?
i. 跟踪记录资源的使用状况——数据结构
如:哪些资源空闲,分配给谁使用,允许使用多长时间等。
ii. 确定资源分配策略——算法
静态分配策略:在程序执行前就分配好,之后就不需要分配新的资源了。这种策略容易造成资源浪费。如果程序不使用某资源了,别的程序也无法使用。
动态分配策略:在程序执行的过程中,向操作系统请求资源,由操作系统进行资源分配。使用完后再返回给操作系统。
iii. 实施资源的分配和回收
iv. 提高资源的利用率
v. 保护资源的使用(不受其他进程干扰)
vi. 协调多个进程对资源请求的冲突
资源管理方面,操作系统的五大基本功能
i. 进程/线程管理(CPU管理)
进程线程状态、控制、同步互斥、通信、调度等;
ii. 存储管理
分配/回收、地址转换、存储保护、内存扩充等;
iii. 文件管理
文件目录、文件操作、磁盘空间、文件存取控制等;
iv. 设备管理
设备驱动、分配回收、缓冲技术等;
v. 用户接口
系统命令、编程接口等。
2).向用户提供各种服务→方便使用
操作系统为用户提供了一组功能强大、方便易用的命令或系统调用。
典型的服务有:进程的创建、执行;文件和目录的操作;I/O设备的使用;各类统计信息;
3).对硬件机器的扩展→扩展能力
操作系统是硬件基础上的第一层软件。是用户和硬件之间的协调者,用户不需要进行繁琐的硬件操作,只需要向操作系统软件提要求,由操作系统完成对应指令。
操作系统在应用程序与硬件之间建立了一个等价的扩展机器(虚拟机)。对硬件抽象,提高可移植性;比底层硬件更容易编程。
3. 操作系统的主要特征
操作系统的主要特征:并发、共享、虚拟、随机。
3.1 并发(concurrency)
并发:指处理多个同时性活动的能力;
并发会产生很多问题:活动切换、保护、相互依赖的活动间的同步等等。
对于单CPU,计算机系统中同时存在多个程序时:
宏观上,这些程序似乎是同时执行的;
微观上,其实任意时刻只有一个程序在真正执行,多个程序发出的命令其实是在CPU上轮流执行的。
并行(parallel):与并发类似,但指的是不同程序同时在多个硬件部件上执行,例如多核CPU。
3.2 共享(sharing)
共享:操作系统与多个用户的程序共同使用计算机系统中的资源(共享有限的系统资源)。
互斥共享:某资源只能一个程序使用,其他程序不能使用。
同时共享:某资源可以多个程序同时使用。
对操作系统来说,共享的特征会出现如资源分配难以达到最优化,以及资源的保护等问题。
3.3 虚拟(Virtual)
虚拟:一个物理实体映射为若干个对应的逻辑实体——分时或分空间。
虚拟是操作系统管理系统资源的重要手段,可以提高资源的利用率。
虚拟性的举例:
1).CPU——每个进程的“虚拟处理机”;
2).存储器——每个进程都有独立的虚拟地址空间(代码+数据+堆栈);
3).显示设备——多窗口或虚拟终端;
3.4 随机(Random)
操作系统必须随时对以不可预测的次序发生的事件进行响应并处理。
随机性的举例:
1).进程的运行速度不可预知:多个进程并发执行,走走停停,无法预知每个进程的运行推进的快慢;
2).难以重现系统在某个时刻的状态(包括重现运行中的错误)
4. 典型操作系统的架构
4.1 Windows架构
不同体系结构在内核层区别,相同体系不同硬件是在硬件抽象层区别的。
执行体和动态链接库(DLL)相接,为用户提供各种API,用于通过操作系统控制硬件。
系统再简化后,windows的架构可以简化为如下图所示。 1).Ntdll.dll
Ntdll.dll是一个特殊系统支持库,主要用于子系统dll,主要包含两种类型函数:
i.系统服务分发存根,调用Windows执行体系统服务
ii.内部支持函数,供子系统,子系统dll,以及exe映像文件使用Ntdll.dll里面提供的函数大多未文档化,并以Nt开头命名。
2).环境子系统
环境子系统就是针对Windows不同版本(如:Windows 7 旗舰版,Windows Server2008 R2这种)上的运行环境。每个exe可执行映像,未必可在所有版本Windows系统上运行。VC++中link命令的/SUBSYSTEM修饰符可以指定该exe映像的可执行环境(如:dll集)。
环境子系统进程Csrss.exe(Client/Server Run-Time Subsystem)就是客户机/服务器运行时子系统,子系统是会话管理器(Smss.exe)进程起来的。
3).系统进程
Idle进程(特殊进程,其实是CPU空闲时间)
System进程(特殊进程,包含大多数内核模式系统进程)
会话管理器(Smss.exe)
本地会话管理器(Lsm.exe)
会话0初始化(Wininit.exe)
登录进程(Winlogon.exe)
服务控制管理器(Services.exe)
本地安全认证服务器(Lsass.exe)
________________________________________
4).Windows执行体
Windows执行体是Ntoskrnl.exe的上层(其下层是内核),主要包含以下组件:
配置管理器、进程管理器、安全引用监视器、I/O管理器、即插即用(Pnp)管理器、电源管理器、Windows驱动程序模型、缓存管理器、内存管理器、对象管理器
5).内核
内核是Ntoskrnl.exe的下层,主要包括:
内核对象、内核处理器控制区和控制块(此处较为复杂,需要寻找专门文章讲解)
6).设备驱动程序
设备驱动程序运行在内核模式下,主要为发起I/O请求的用户线程中,设备驱动程序主要分为以下几种:
硬件设备驱动、文件系统驱动、文件系统过滤驱动、其他:(网络重定向,协议驱动,内核流失过滤驱动)
驱动程序框架:
早期的WDM,对应DDK开发工具包
基于WDM封装的WDF框架,对应WDK开发工具包
7).硬件抽象层(HAL)
硬件抽象层是的Windows可以被移植到各种硬件平台,它是一个可加载的内核模块,针对不同的硬件平台,提供了统一的服务接口。
参考资料地址:https://blog.51cto.com/14207158/2353734
4.2 Unix架构
参考资料地址:https://blog.****.net/fantasy_wxe/article/details/14051729
4.3 Linux架构
参考资料地址:https://blog.****.net/changexhao/article/details/78321295
4.4 Android操作系统的整体架构(*)
4.5 自己的一些思考
Windows、Unix和Linux的架构非常相似,都有针对硬件的处理层,都有处理线程、中断的内核,以及都有系统函数调用的接口。Windows的架构中包含了图形图形管理,而其他系统的架构没有。
Android的架构可以看出是基于Linux内核的。
5. 操作系统的分类
5.1 批处理操作系统
追求目标:提高资源利用率,增加作业处理吞吐量。
工作方式:
1).用户将作业交给系统操作员;
2).系统操作员将许多用户的作业组成一批作业,输入到计算机系统中,在系统中形成一个自动转接的连续的作业流;
3).启动操作系统;
4).系统自动、依次执行每个作业;
5).由操作员将作业结果交给用户。
问题:慢速的输入输出由主机来完成,在输入输出时,CPU处于空闲状态。
解决办法:采用“卫星机”的方式解决。
实现方式:SPOOLing技术(Simultaneous Peripheral Operation On-Line),同时的外围设备联机操作技术。
现代计算机系统的打印过程通常是采用SPOOLing技术。
5.2 分时系统
追求目标:及时的响应时间(从终端发出命令到系统给予回答所经历的时间)。
工作方式:
操作系统将CPU的时间划分成若干个片段,称为时间片。
操作系统以时间片为单位,轮流为每个终端用户服务,每次服务一个时间片。其特点是利用人的错觉,使用户感觉不到计算机在服务他人。
从前通常是将批处理系统和分时系统结合起来使用,原则是分时优先,批处理在后。
5.3 实时操作系统
追求目标:对外部请求在严格时间范围内做出响应;可靠性要很高。
指计算机能及时响应外部事件的请求,在规定的严格时间内完成对该事件的处理,并控制所有实时设备和实时任务协调一致地工作。
5.4 个人计算机操作系统
追求目标:界面友好,使用方便,提供丰富的应用软件
5.5 网络操作系统
追求目标:互相通信,资源共享
基于计算机网络,在各种计算机操作系统上,按网络体系结构协议标准开发的软件。
网络操作系统需要具备网络管理、通信、资源共享、网络安全等功能。
5.6 分布式操作系统
追求目标:以计算机网络为基础或以多处理机(多核CPU)为基础,基本特征是处理分别在不同硬件上。
分布式操作系统是一个统一的操作系统,允许若干个计算机可相互协作共同完成一项任务。操作系统可将各种系统任务在分布式系统中任何处理机上允许,自动实现全系统范围内的任务分配、自动调度、均衡各处理机的工作负载。
分布式操作系统的优势是:处理能力快、速度更快、可靠性增强、具有透明性。
5.7 嵌入式操作系统
追求目标:在各种设备、装置或系统中,完成特定功能的软硬件系统。它们通常是大设备或装置中的一部分。通常工作在对处理时间有较严格要求的环境中。
嵌入式操作系统需要对它所操作控制的各种部件装置等等资源进行统一协调、调度和指挥的系统软件。