计划大纲
日期 | 计划进度 | 完成情况 | //TODO |
---|---|---|---|
31 | 6 7 章节书, 看试卷大题 | ||
1 | 其他章节, 概念, 对应试卷题 银行家算法 pv | ||
2 | 填空选择, 查缺补漏. | ||
3 | pv / 查缺补漏 / 重做试卷. | 晚上加班, 课本概念理一遍. 试卷过一遍, 再按需求看 pv , 银行家 | 记得看书哦 |
4 | 上午下午都是做试卷 | 晚上或 5 号约人讨论题目 | |
5 |
备注
自己理解后描述一遍概念, 不应超过全书 5% , 全文不要超过 2.5w 字.
全文 24,000 字 阅读 40 分钟左右.
第 1 章 操作系统概述
1.1 操作系统的基本概念
计算机系统组成:
硬件(Hardware):CPU、存储器、输入/输出设备
软件(Software):是存储、运行在存储器、CPU中的程序. 具有一定的抽象性,难以理解。
软件一般分为:
系统软件:用于对计算机的软硬件资源进行管理并为应用程序提供服务的程序集合,如编译程序、解释程序、操作系统等;操作系统(Operating System)是最基本的系统软件,是最接近硬件的第一层软件,它负责管理计算机系统的各种软硬件资源,并为其它软件的运行提供支撑
支撑软件:运行于系统软件之上,为应用软件提供开发环境和手段,以方便于应用软件系统的开发,如各种集成软件开发环境和各种中间件(Middleware)等
应用软件:是为了完成某种特定应用功能的专用程序,如Office办公软件,它运行在系统软件或系统软件和支撑软件所构筑的软件平台之上。
裸机 (Bare Machine) : 计算机系统中的硬件常被称为裸机
虚拟机 : 由计算机硬件和操作系统所组成的计算机系统称为“虚拟机”,它具有比裸机更强的功能和更好的易用性。

1.2 操作系统的基本功能
操作系统管理的对象中,硬件资源有CPU、内存、寄存器、堆栈、辅助存储器、输入/输出设备等,而软件资源有系统软件、应用软件、数据等。
操作系统的功能包括如下五部分:处理机管理、存储器管理、设备管理、文件管理和用户接口。
1.2.1 处理机管理
处理机管理就是对CPU进行管理, 为了方便处理机的调度、分配和管理,引入了进程和线程的概念
处理机的管理最终可以归结为对进程的管理,包括进程管理、同步、互斥、通信和死锁等内容。
1.2.2 存储管理
存储器管理的对象为主存储器,简称为内存或主存。
程序若要运行需首先装入内存,而内存大小是有限的.涉及到 用户程序如何申请到内存?申请到内存后又怎样从外存(磁盘等)装入内存?具体装入到内存的哪个位置等?若与内存中已有的程序发生冲突如何处理?这些功能应由软件自动实现自动处理, 减轻用户负担. 而操作系统中的存储器管理模块就是干这个的。
存储器管理的主要任务是内存的分配和回收、内存扩充、存储共享与保护、地址变换等,并以提高内存的利用率、扩大内存的相对容量、为用户提供透明服务为目的.
(1)内存的分配和回收:为要装入内存的程序分配内存空间,在程序运行结束后要释放所占用的内存资源,并由系统进行登记,以便分配给将要运行的程序。
(2)内存扩充:解决分配给作业或进程的内存空间不足问题,达到小内存运行大程序的目的,同时也为了提高进程的并行性,使系统资源得以充分利用,均需要对内存的容量进行相对扩充。操作系统主要采用软件技术(如覆盖技术、交换技术和虚拟技术等)对存储系统进行管理,利用大容量的辅存来弥补内存空间的不足(详见第5章存储管理)。
(3)存储共享与保护:这里有两方面含义:
一是指存储共享,即当多个程序包括一个公用程序段时,这个公用程序段在内存中仅存一个副本,为一共享程序段;存储管理要解决这一公用程序段的共享问题。
二是指存储保护,即内存中存在多个运行程序时,存储管理要保证每个用户程序只能访问自己的存储空间,不能对驻留在内存中的操作系统等系统软件或其它应用程序造成破坏。
存储保护通常需要硬件的支持,常用的方法有界限地址寄存器、存储保护键等。
(4)地址变换:当程序从外存装入内存时需将程序中每条指令的地址(相对地址或逻辑地址)转换为内存中的地址(物理地址)。该过程可以在程序装入内存时完成(静态地址变换),也可以在程序执行时进行(动态地址变换),分别称为静态或动态地址重定位,通常需要硬件的支持。
1.2.3 文件系统
计算机系统所处理的对象为程序和数据;这些程序和数据通常以文件的形式存放在磁盘、光盘、磁带等(真的, Google 现在还在使用呢. 毕竟便宜, 好用)外部存储器上,需要时再装入内存。[ 程序 = 算法 + 数据结构] [软件 = 程序 + 软件工程 ] [ 软件公司 = 软件 + 商业模式 ]
存有大量的系统软件、应用程序和数据等,需要解决的问题是如何对文件的查找和透明存取[ 用户感知不到 ].
实现对文件的“按名存取”是操作系统所要完成的另一项重要功能
文件管理还应提供文件的共享和保护、文件操作等功能;
文件的共享对于多道程序系统、多用户系统或多任务系统是相当重要的,它使得被多个程序共享的对象在外存上仅保留一个备份,从而提高了外部存储器的利用率;
文件保护功能用于对外部存储器中的文件进行保护,防止文件受到其它用户非法读取或破坏;
文件操作为用户对文件进行操作提供手段,如文件的读、写、复制、删除等。
磁盘的容错功能也是由文件系统提供,以保证所存储文件的可靠性。
1.2.4 设备管理
设备管理是指计算机中除了CPU和内存以外的I/O (输入/输出)设备的管理。
I/O设备也称为外部设备,其种类繁多,功能差异很大,使用方法各异。
设备管理的主要任务就是通过驱动程序和控制程序自动实现对I/O设备的管理和调度以及数据传输,使I/O设备的具体细节对用户而言是透明的
设备管理的另一任务就是通过中断技术、DMA(Direct Memory Access)技术、通道技术、缓冲技术等使CPU与外部设备能够并行、高效地工作. 这些技术解决高速CPU与低速外设间速度不匹配的矛盾,从而提高系统资源的利用率。
你问有啥用? cpu 运行的贼快, 外设速度贼慢: 天上一天地下一年的感觉.
设备管理应包括如下功能:
响应用户进程提出的I/O请求;
为用户进程分配I/O设备;
对系统的I/O设备进行管理;
控制CPU与外设间的数据交换。
1.2.5 用户接口
操作系统作为计算机系统资源的直接管理者,应提供相应的手段( “API” )供用户使用,以使用户可以方便地使用系统的各种资源,这种手段就是用户接口。
用户接口通常有两种,操作级接口 [ 一种供用户通过键盘和鼠标直接对计算机进行操作 ];另一种是编程级接口 [ 供用户在编程过程中使用 ];这两种接口有三种体现形式:命令接口、图形接口和编程接口。 [ 将 or 已经流行的语音操作, 触摸操作, 本质讲和 GUI 操作, 编程接口, 命令接口没差. 也是学习操作系统发展的原因 : 抽象化技术.]
命令接口比如 :
联机用户接口 :用户通过显示器和键盘逐条键入完成想要的操作[ 命令 ]
脱机用户接口 : 如批处理等 [ 命令也可以通过编辑程序录入到计算机内,形成一个文件,系统通过运行这个文件来完成指定的功能 ]
GUI [ 图形接口 Graphics User Interface ] 为用户提供了功能图标或菜单并显示在显示器上,用户若想完成某项功能就可以用鼠标点击相应的图标或者选择相应的菜单( 俗称"拖拉拽" ),如windows xp / 7 / 10、Linux等均提供这样的方式。
操作系统通过系统功能调用来实现它的编程接口。开发软件时,用户通过编辑程序将系统功能调用嵌入到程序中来访问系统的软硬件资源,功能实现的具体细节当然对 User 而言是透明啦.
实际上命令控制界面也是通过系统功能调用来实现的。每个系统调用具有不同的功能号,对于不同的操作系统有不同的系统调用,一般有几十至几百条。
系统调用可分为如下几类:设备管理、文件管理、进程管理、存储管理、线程管理。 ( 操作系统底层实现各种"轮子", 各种"应用软件"调用系统"轮子"实现业务需求, 进行"造车". 中间涉及设计模式, 软件工程, 算法, 数据结构等其他 )
总之操作系统设计的目标之一就是为用户提供直观、简单、高效、易用、透明的用户接口。
1.3 操作系统的发展
1.3.1 手工阶段 1946 年, 电子管电脑. 一代
1.3.2 早期批处理 1950-1960, 晶体管取代电子管,进入二代.
提出了脱机批处理的概念 [ 输入/输出工作在一台单独的计算机(称为卫星机或外围处理机)上进行,而程序运行在另一台主处理机上 ]
此阶段系统称为单道批处理系统, 也称为联机批处理系统.

1.3.3 多道程序系统
60 年代出现了对计算机技术发展具有重要影响的两种技术:通道技术和中断技术

1.3.4 分时系统
为了改善批处理系统的性能,加上因为当时的计算机非常昂贵,希望一台计算机可以供多个用户同时使用,所以出现了分时操作系统。这种系统的计算机连接多个终端用户,各用户通过终端按一定的时间片轮流占用CPU等系统资源;相对于较慢的人工干预过程而言,对于较快速的计算机来讲用户几乎感觉不到系统的响应延迟
1.3.5 实时系统 65 年左右, 广泛被工业, 军事使用, 系统快速发展. 进入第三代.
实时系统 : 指系统能及时(或即时)相应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行
1.3.6 通用操作系统
通用操作系统 : 可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。
例如,将实时处理和批处理相结合构成实时批处理系统。在这样的系统中,它首先保证优先处理任务,插空进行批作业处理。通常把实时任务称为前台作业,批作业称为后台作业。将批处理和分时处理相结合可构成分时批处理系统。同样,分时用户和批处理作业可按前后台方式处理。
65 年左右, 国际许多大厂开始造操作系统的轮子, 试图完成 “功能齐全、可适应各种应用范围和操作方式变化多端的环境” 的操作系统, 最终因为系统庞大复杂, 在解决其可靠性、可维护性、可理解性和开放性等方面都踩了无数坑, 没爬出来. 当然有极少数成功的, 比如你听过的 UNIX 操作系统.
这里聊聊"野史" :
UNIX 和 linux 啥区别 ?
Unix于1969年由贝尔实验室开发出来,使用至今已变更了很多个版本。
目前主流的Unix系统有三种,分别是AIX、HP-UX、Solaris,这些Unix系统互不兼容。
Linux于1991年由芬兰大学生Linus开发出来,是一个类Unix系统,但是其代码不源自任何Unix版本,完全不是Unix的一个分支,而是一个开源版的模仿。
现在Linux主要使用在PC机和嵌入式,或者一些小型企业的服务器;而Unix垄断着大型企业的关键性应用领域。
linux和CentOS是什么关系?
1、linux和CentOS是什么关系?
CentOS是Linux众多得发行版本之一,linux有三大发行版本(:Slackware、debian、redhat),而Redhat有收费的商业版和免费的开源版,商业版的业内称之为RHEL系列,CentOS是来自于依照开放源代码规定而公布的源代码重新编译而成。可以用CentOS替代商业版的RHEL使用。两者的不同,CentOS不包含封闭源代码软件,是免费的。
2、CentOS和RHEL是什么关系?
软件在发行的时候,有两种方式。一种是二进制的发行方式,另外一种是源代码的发行方式,rhel无论是哪一种发行方式,你都可以免费从网上获得。 RHEL 一般都提供源代码的发行方式但如果你使用了他们的在线升级或咨询服务,就必须要付费。
CentOS 就是将 RHEL 发行的源代码从新编译一次,形成一个可使用的二进制版本,由于 LINUX 的源代码是 GNU,所以从获得 RHEL 的源代码到编译成新的二进制,是合法。只是 REDHAT 是商标,所以必须在新的发行版里将 REDHAT 的商标去掉。CentOS 可以得到 RHEL 的所有功能,甚至是更好的软件,但 CentOS 并不向用户提供商业支持,当然也不负上任何商业责任。
聊完野史, 继续开始学习.
1.3.7 多种操作系统并存
80 年代, 随着大规模集成电路制造技术的发展, 迎来了"个人计算机时代".
1981 年 8 月微软 [ MicroSoft ]公布了DOS1.0版本的运行在8086微处理器环境下的单用户操作系统;随后CPU由8086、80286发展到80586乃至奔腾系列,Windows 操作系统也随之迅速发展到 Window NT、Window 2000和Window XP
1.4 操作系统的类型
有的用不就好了, 干嘛这么多操作系统? 因为不同时期产生了不同种类的操作系统,以满足该时期特定的硬件条件下用户对计算机的使用需求;
同时针对不同的应用场合,也开发了相应的操作系统以满足用户的特殊需求。下面讲讲常见操作系统优缺点, 任君选择.
1.4.1 批处理操作系统
为了提高CPU的利用率,引入了多道程序设计技术, 从此批处理操作系统由单道批处理发展成多道批处理.
多道程序设计 [ Multiprogrammin 内存中同时装入多个"作业",多个"作业"通过一定的调度算法轮流占有CPU,使CPU 尽量不停工作,提高利用率 ]
1.4.2 分时操作系统
分时操作系统 : 按时间片将CPU轮流分配给系统内的每个程序。 [ 时间片 : 将规定的CPU时间划分成若干个时间段,每个时间段称为时间片 ]
当该时间片选择合理或计算机的速度足够快时,用户或程序并没有感觉到其它用户或程序的存在,仿佛自己的 moment, 独享计算机系统的所有资源,然而实际上却是 N 个用户或程序轮流地使用计算机。
分时操作系统具有多路性、独立性、及时性、交互性等特征, 是一个联机(On-line)、多用户(Multi-user)、交互性(Interactive)的操作系统
1.4.3 实时操作系统
在设计上首先要保证它的实时性和可靠性,其次才是系统效率。
它常有两种类型:实时控制系统和实时信息处理系统
实时控制系统 : 能够实时采集测量数据,并对数据进行实时加工、处理和输出. 这种系统主要用于军事和工业生产过程的自动控制。
实时信息处理系统 : 对用户的请求及时做出响应,并能及时修改、处理系统中的数据. 主要用于银行业务、订票系统的实时事务管理。
1.4.4 通用操作系统
通用操作系统 : 在三种基本类型的操作系统基础上发展的""具有多种类型操作系统特征"的操作系统
[ 回顾下"三种基本类型" : 批处理、分时和实时操作系统 ]
1.4.5 个人计算机操作系统
这类操作系统具有虚存、并发、多任务、联网等特征或功能.
比如 : 这类操作系统有DOS、Windows 7/10 ,Linux, MacOS等。
1.4.6 嵌入式操作系统
嵌入式系统 : 以应用为中心,软硬件可裁减,能够满足应用系统对功能、可靠性、成本、体积、功耗等综合性要求的专用计算机系统. “基于实际情况阉割版的计算机系统”. [ 这种"基于实际情况进行优化"的思想, 在算法题中常出现, 也是各种算法的特性 ]
嵌入式操作系统 : 运行在嵌入式系统环境中,对整个嵌入式系统及其操作、控制的对象进行有效管理的系统软件。
分为
①强实时性嵌入式操作系统,如WindRiver公司的VxWorks、ISI的pSOS、ATI 的Nucleus等
②弱实时嵌入式操作系统,移动电话、机顶盒等。
过去,现在以及未来将在工业控制, 交通管理, 信息家电, 家庭智能管理, POS网络, 环境工程与自然, 机器人, 机电产品应用, 移动互联网等领域持续发力.
1.4.7 网络操作系统
网络操作系统 : 运行于计算机网络环境下,按照网络体系结构协议标准开发的操作系统。
利用局域网低层提供的数据传输能力,为高层网络用户提供通信服务以及资源共享等功能,
网络操作系统具有多用户、多任务功能,网络用户只有通过网络操作系统才能享受计算机网络提供的各种服务。目前流行的网络操作系统有Windows NT、Unix、Linux等。
[ OS/2是由微软和IBM联合研制,分为微软的Microsoft OS/2 NT与IBM的IBM OS/2。由于双方在协作后来不欢而散,IBM继续向市场提供先前的OS/2版本;而微软则把OS/2 NT改名为Windows NT]
unix设计时为了节约硬件成本,采用c/s,很重视网络,bsd更是支持全套TCP/IP协议,linux则把网络作为内核6大模块之一.
1.4.8 并行操作系统
并行计算机系统咋工作 ? 一般包括并行工作的多台处理机,这些处理机经总线或高速通信网络系统连接起来,机间通过共享内存、收发消息等方式进行通信,各台处理机上可以运行不同的进程或线程,真正实现多进程(线程)的并行执行;这种系统的组成硬件一般要求相同,并由统一的全局操作系统进行管理,故也称为紧耦合系统
目前较成熟的并行计算机系统有 SMP (Symmetrical Multi-Processors对称多处理机系统 ) 和 MPP (Massively Parallel Processors 大规模并行处理系统 ),其中对称多处理器操作系统是较为成熟的一种并行操作系统。
1.4.9 分布式操作系统
分布式操作系统 : 运行在分布式系统环境下的操作系统
分布式系统(distributed system: 是一些独立计算机的集合,这些计算机通过通信网络等手段连接起来,并由分布式操作系统来统一协调管理,用户在本地计算机上就可以透明地使用分布式系统中的各种资源,获得比单机系统更强的处理能力。
分布式系统是建立在计算机网络基础之上的松散耦合系统,而计算机网络中的设备可以是异构的,所以分布式系统环境下的资源管理是相当复杂的,
分布式系统的功能之一是能够同时处理多个任务(或一个任务的多个子任务),这些任务被分配到多台计算机上完成,这就涉及到任务分派;任务分派过程中尽量能充分发挥每台计算机的效率,并使它们承担与其计算能力相称的运算量,此功能称为负载平衡;当运行某个进程的计算机出现了故障,或者其它计算机上的计算资源更适合该进程运行,这个进程就需要迁移到另外一台计算机上来运行,进而分布式操作系统要具有进程迁移功能;此外,分布式操作系统还要完成分布式进程的同步与控制、计算机间的进程通信等功能。
集群系统(cluster system)是分布式系统的一个典型例子,它通过低档的计算机、网络互联设备和集群操作系统构造出性能相当于超级计算机的集群系统。
到此, 可能不懂"分布式", "集群"啥区别? 且听我娓娓道来:
分布式是应用部署在不同的服务器上,每个服务器上部署的应用称为节点。节点特别多的时候,为方便管理将多个节点划分成一个组,即集群。也可以这么理解:集群是包含很多小节点的大节点。应用多个节点或多集群的部署方式叫做分布式。
集群是个物理形态,分布式是个工作方式。
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题集群:同一个业务部署在多台机器上,提高系统可用性
啥? 还不懂 ?
大白话讲 : 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。
为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群.
1.4.10 多媒体操作系统
传统的操作系统管理的对象是普通的数字和字符等,而多媒体操作系统所管理的对象除包括这些具有明显的结构化特征的数据信息外,还要能够处理声、图、文字等多媒体数据以及一些其它半结构化或非结构化信息;这些多媒体数据信息量大,属于海量储存;而且多种媒体数据间往往存在一定的联系,处理多个数据流的多个进程常常需要同步,并要求在限定的时间内完成,如视频点播 (Video On Demand, VOD)、视频会议等。
这种所处理对象的特殊性要求多媒体操作系统在进程调度、数据的组织和存取、磁盘管理和调度等方面不同于传统的操作系统。
1.5 操作系统的基本特征
操作系统均具有并发、共享、虚拟、异步四个基本特征
其中并发和共享是操作系统最基本的特征,其它特征( 虚拟,异步等等 )都是以它们为前提的
1.5.1 并发性
并发 ( Concurrence) : 是指两个或多个事件在同一时间间隔内发生
并行 : 是指两个或多个事件在同一时刻同时发生
1.5.2 共享性
共享 ( Sharing ) : 指系统资源可供内存中多个并发执行的程序同时使用,目的是提高系统资源的利用率。
系统资源 : 指CPU、内存、数据和各种外设等。
资源共享有两种方式:互斥共享和同时共享 . [ 互斥共享🌰: 打印机. 同时共享🌰: 对磁盘的访问 ]
1.5.3 虚拟性
虚拟性(Virtual)是将一台物理设备映射成多个逻辑设备,并分配给每个用户,使得各用户认为他独自占有一台实际的物理设备.
应用🌰 : 分时操作系统环境下的CPU && 处于共享状态的打印机 && 操作系统中普遍采用的虚拟存储技术 [ 该技术将主存储器和辅助存储器有机地结合起来,通过软件技术为用户提供了无限大的虚拟存储空间,可以运行比内存空间大得多的程序,但程序运行的实际存储空间仅为有限的内存空间,而用户感觉不到这种有限内存空间的局限性 ]
1.5.4 不确定性
操作系统的不确定性 : 是指程序执行过程中的不可预测性,并不是指程序结果的不确定性。
进程的运行在系统中呈现为运行、暂停、运行、暂停……,而且进程状态的转变受系统资源使用情况的制约,具有一定的不确定性(Uncertainty);由此可见进程的执行是以不可预见的速度向前推进,是异步(Asynchronism)的。
1.6 操作系统的组成结构
操作系统的组成结构 : 讨论系统程序是按什么样的结构组织在一起
1.6.1 无结构的操作系统
主要指操作系统发展的初期. GOTO广泛使用.
1.6.2 模块化结构的操作系统
1960 年代出现了模块化程序设计技术 [ 通过任务分解和模块化来降低开发大型软件的复杂程度 ]
优点是系统的结构紧凑、接口简单、效率高
缺点: 存在模块间数据联系过多、独立性差等

1.6.3 分层结构的操作系统
随着计算机硬件性能指标的快速增长,操作系统的功能也越来越强, 规模越来越大,其复杂性也随之增加。对此操作系统的设计不仅采用了模块化技术而且也引入了层次式设计方法 [ 在硬件裸机的基础上一层一层地向外扩充软件,其中低层软件为高层软件提供服务,高层软件通过调用低层软件来实现其功能 ]
由于每一层仅使用其低层软件所提供的功能和服务,故减少了模块间的耦合性,增强了模块间的独立性
同时各模块采用统一的接口供上层调用,可以使系统的结构更加清晰和规范,系统的调试和验证也变得更为容易

1.6.4 微内核结构的操作系统
微内核技术是指精心设计的、能实现现代操作系统核心功能的小型内核.
微内核 : 仅包括操作系统中最主要、最基本、最底层的功能,如进程管理、存储器管理、进程通信、低级I/O功能等,因而它不是一个完整的操作系统,它为通用操作系统的开发提供底层支持,
它与一般的操作系统不同,它短小精炼,不仅运行在核心态,而且开机后常驻内存。在此内核的基础上和模块化、层次化设计方法以及面向对象技术相结合可以非常方便地开发出具有各种特点的操作系统
1.7 研究操作系统的几种观点
观察的角度不同,对操作系统的要求是不一样的。这样在研究操作系统的过程中,所占的角度不同,所持的观点也不尽相同.
一般研究操作系统有如下几种观点:资源管理的观点、用户界面的观点、进程管理的观点
1.7.1 资源管理的观点
从资源管理的观点研究、分析、设计操作系统包括如下几方面内容:
(1)记录资源状态。
利用各种数据结构记录各种资源的当前使用情况,包括正在使用的资源以及处于空闲状态的资源的详细信息。
(2)资源的分配和调度。
根据系统的设计目标确定一组分配原则和调度算法,以决定将存储器、处理器等资源分配给哪一个程序?何时分配?分配多长时间?等等,并在资源分配表上进行登记,记录资源的使用情况。
(3)资源回收。
当资源使用完后,要对资源进行回收,并在相应的资源表上进行登记,以便以后进行分配使用。
1.7.2 用户界面的观点
用户角度来看,操作系统的功能越强、界面越友好、使用越方便,肯定越受欢迎. 只注重结果, 其他对我都是透明的.
1.7.3 进程管理的观点
进程是操作系统中的一个重要概念,它的来龙去脉我之前讲过了 [ 它是为了描述系统中程序的并发执行过程而引入的,它是程序执行过程的动态描述,为资源分配的基本单位 ]
程序的执行体现为一个非常复杂的动态过程和异步特性。进程作为独立运行的实体、资源分配的基本单位,其管理贯穿于操作系统的始终。
1.8 典型操作系统简介
1.8.1 Windows系列操作系统
注 : 这个说的应该是"正式版", 对应有 alpha, bate 版.

1.8.2 UNIX操作系统

https://www.levenez.com/unix/
可以上这个网址看一看来龙去脉.
1.8.3 Linux操作系统
略
##第 2 章 用户接口
2.1 作业
2.1.1 作业的概念

作业 : 用户交由计算机进行加工处理的任务
批处理系统以作业为单位把程序和数据调入内存以便执行。
人们一般不太使用作业的概念,
2.1.2 作业控制块
作业控制块(Job Control Block, JCB)是作业在计算机系统中存在的惟一标识 .
主要用来记录作业的标识、现行状态、作业的优先级、作业要求的资源等一系列关于作业运行的信息,它是作业运行的依据。
2.1.3 作业的状态及其转换
(1)提交状态 (2)收容状态 (3)执行状态 (4)完成状态

过程说明
作业从提交状态进入收容状态后,系统为其建立作业控制块,将其加入后备作业队列中,等待作业调度程序调度。
待作业被作业调度程序按某种调度方法选中,且分配了必要的资源时,该作业便进入了执行状态。
这时,处理机管理程序建立此作业的有关进程,转入进程调度。
作业运行结束后,由执行状态进入完成状态。系统通过作业调度程序将其运行结果(含出错信息)输出,回收其占用的系统资源,收回该作业控制块,并将其从现行作业队列中删除。
系统可以通过联机方式,调用相应设备进程直接输出,也可使用SPOOL技术将其输出到输出井中,再调用相应的输出进程,将该作业的输出文件在输出设备上输出。
2.1.4 作业的输入输出方式
输入 : 是指通过作业输入设备把作业从输入介质上送入系统(即磁盘的输入井)中并加以组织,在磁盘上建立一个后备作业的过程
输出是指通过作业输处设备把系统(即磁盘的输出井)中作业的执行结果输出到一定介质上的过程
五种输入输出方式
1.联机输入/输出方式
主机与外围设备直接相连,一台主机可以控制一台或多台外围设备
主机和外围设备的速度相差悬殊,因而CPU的利用率较低。这种方式通常用在交互式系统中。
2.脱机输入/输出方式
主机与外围设备不直接相连,而是利用如个人计算机这样的低档计算机作为外围处理机进行输入和输出。
在进行输入时,通过外围处理机把作业输入到后援存储器上,然后由人把存有作业的后援存储器挂接到与主机相连的外围设备上和主机连接。同样在进行输出时,由人把存有作业运行结果的后援存储器从主机摘下,再连接到外围处理机上,外围处理机控制输出。
3.SPOOLing系统
SPOOLing(Simultaneous Peripheral Operations On Line)可直译为外围设备同时联机操作
通过通道或DMA部件多台外围设备与主机和外存连接在一起
4.直接耦合方式
利用外围处理机把作业输入到公用存储器,再由主机进行处理,处理结果送到公用存储器中存储,待一个作业的结果全部存到公用存储器之后,再由外围处理机进行输出
克服了联机输入/输出方式CUP利用率低的缺点,同时脱机输入/输出方式中人工进行操作的缺点
5.网络输入/输出方式
利用上述4种方式进行作业输入之后,再通过网络把作业从存有作业的计算机中传送到处理作业的计算机中,作业处理完之后,再利用网络把结果传送到用来进行输出的计算机中进行输出
2.2 命令接口
作业控制(命令)语言(Job Control Language ,JCL)
2.2.1 联机用户接口
联机命令接口应包含命令、终端处理程序和命令解释程序.
MS-DOS操作系统中,命令解释程序为COMMAND.COM,在linux系统中为shell .
2.2.2 脱机用户接口
2.3 编程接口
系统调用是操作系统提供给编程人员的惟一接口
调用系统中已有的系统功能来完成那些与机器的硬件部分相关的工作以及控制程序的执行等
命令接口也是在系统调用的基础上开发而成的
系统调用是中断的一种,是自愿性中断
2.3.1 系统调用的类型
2.3.2 系统调用的实现
为了提供系统调用功能,操作系统内必须有事先编制好的实现这些功能的子程序、过程或函数
陷阱 ( trap ) 处理机构 : 是系统中控制系统调用的服务机构.
陷阱指令 ( 或称访管指令 ) : 由于系统调用引起处理机中断的指令.
用户程序和系统程序之间参数传递的方法有如下三种
1) 由陷阱指令自带参数
2) 通过使用有关通用寄存器来传递参数
3) 通过堆栈区来传递参数
处理机状态字 ( PSW ) : 反映处理机的硬件状态
2.4 图形接口
2.4.1 窗口
2.4.2 图标
2.4.3 菜单
2.4.4 对话框
2.5 Linux的用户接口
##第 3 章 进程管理
为了能够精确地描述和研究程序在系统中运行的动态情况,引入了的进程这一概念。
进程可以认为是处于执行状态中的程序,也可以认为是现代操作系统中的一个基本运行单位。
自从引入了"进程"这个概念,就可以很好很具体的描述系统内多道程序的动态性、并发特性.
3.1进程的基本概念 /41

程序的顺序执行具有如下特征:
1)顺序性:每一操作必须在下一操作开始之前结束。
2)封闭性:程序在封闭的环境中运行,独占计算机系统的全部资源,执行结果由给定的初始条件决定,不受外界因素的影响。
3)可再现性:程序的运行结果与执行速度无关,只要初始条件相同,任何时候执行都会得到相同的结果。

程序的顺序执行导致系统资源的浪费,某一时刻它仅占用系统的一部分资源,而其它资源暂未使用的资源处于闲置状态。
为了提高资源的利用率,引入了多道程序的概念 [ 内存中同时存在多个程序,分别占有或轮流使用系统中的不同资源 ] 以达到提高系统资源利用率的目的
多道程序的特征:
1)独立性:在多道环境中,每道执行的程序在逻辑上都是独立的,各道执行的程序之间在逻辑上不存在制约关系。
2)随机性:多道环境中,每道程序何时装入内存、加工处理的数据何时输入以及程序合适开始执行都是随机的,不是有用户指定的,而是根据系统中程序的运行情况和资源使用情况等决定。
3)资源共享性:系统拥有的各种资源,由系统存在的各道程序共同使用 [ 系统资源是执行者的程序的共享资源 ]
3.1. 1程序的顺序与并发执行 /41

前趋图是用来描述一个程序的各部分(程序段或语句)间的依赖关系,或者是一个大的计算的各个子任务间的因果关系。
前趋图中的每个结点可以表示一条语句、一个程序段或一个进程,结点间的有向边表示两个结点之间存在的偏序(Partial Order)或前趋关系(Precedence Relation)
逻辑上相互独立、不存在相互依赖关系的多个程序段间也可能存在并发性,进而程序间也可能并发地执行
并发性可以转变为并行性,从而大幅度提高硬件资源的利用率,加快程序执行的速度
并发执行是为了提高计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术,使得一组在逻辑上相互独立的程序、程序段或程序语句在执行过程中,其执行时间在宏观上相互重叠
并发执行及其对系统资源的共享和竞争而导致了系统复杂性的急剧增加,此时系统具有如下特征
1)程序执行的间断性:资源的有限性以及对资源的共享和竞争使程序间相互制约,导致程序执行速度的改变
如某一程序段运行过程中产生的计算结果需要打印输出,但此时打印机正被另一并发程序段所占用,则它只能暂停执行,并将自己挂在打印等待队列中等待打印机空闲。
2)失去封闭性:多道程序环境下,由于多个程序共享系统资源,共享资源的状态可能被其它程序所改变,致使程序的运行受其它程序的影响而失去了封闭性。
3)结果具有不可再现性:虽然初始条件相同,但由于程序的工作环境可能被外界因素(其它程序)所改变,故程序在不同的运行过程中所得的结果可能不同。
再次强调"进程"这个概念解决了啥问题 : 由于程序的静态性、独立性及其执行的顺序性, 为了控制和协调各程序段在执行过程中对资源的共享和竞争,应该确定一个描述各程序段执行过程和共享资源的基本单位 , 故提出了进程的概念。
3.1.2 进程的定义及特征 /44
进程是程序关于一个数据集合的一次运行过程.
分成两类:用户进程和系统进程
完成操作系统功能的进程称为系统进程,而把完成用户功能的进程称为用户进程
运行过程中对系统内的各种资源具有不同的访问权限
进程 != 程序
进程具有并发特征,而程序没有
程序是进程的一个组成部分,程序、数据集和进程控制块组成了进程实体(也称为进程映像)。数据集为进程操作处理的对象,进程控制块为用于描述进程的一个数据结构
同一个程序可对应多个进程,但所操作的数据集不同,即同一程序段在不同的数据集上运行可以构成不同的进程
进程和作业
进程是对已提交完毕的作业的执行过程的动态描述, 而作业是静态的.
一个作业至少由一个或多个进程组成
作业的概念主要用于批处理中,而进程几乎用于所有的多道系统中
进程具有如下特征:
```
1)动态性 : 进程的实质是进程实体的一次执行过程,具有一定的生存周期
2)并发性
3)独立性 : 是系统分配资源和调度的独立单位, 是独立运行的基本单位.
4)异步性 : 进程间的相互制约,使得进程以不可预知的速度向前推进 [ 异步方式 ]
5)结构性 : 每个进程都有一个称为进程控制块(PCB)的数据结构用来保存进程的相关信息.
6)相关性 : 进程间会有直接或间接关系.
```
3.2 进程的描述 /46
来龙去脉, 解决的问题之前聊过, 不赘述.
3.2.1 进程的组成 /46
进程由如三部分组成:进程控制块 (PCB Process Control Block)、有关程序段和相应的数据结构集。
进程的物理组成也称为进程映像。
可再入程序也称为纯过程,或纯代码,是指能够被多个进程共享的程序段,代码不因程序的执行而改变. 主要作用就是可被多个进程共享,能被多个用户同时调用。
3.2.2 进程控制块 /46
寄存器通常包括:通用寄存器GR、指令计数器PC、程序状态字寄存器PSW、用户堆栈指针SP等。
PSW : 是 CPU 控制程序执行的依据。
系统因PCB而感知进程的存在 : 通过PCB来对进程进行调度、控制、分配资源。进程执行结束,则通过释放PCB来释放进程所占用的各种资源
3.2.3进程上下文与进程.上下文切换/48
进程执行时需要操作系统为其设置相应的执行环境 [ 如系统堆栈、地址映像寄存器、程序计数器、程序状态字、打开文件表、以及相关通用寄存器等 ]
进程上下文 : 进程的物理实体与支持进程之行的物理环境的合成.
上文 : 已执行过的 [ 进程指令和数据在相关寄存器与堆栈中的 ] 内容
正文 : 正在执行的 [ 进程指令和数据在相关寄存器与堆栈中的 ] 内容
下文 : 待执行的 [ 进程指令和数据在相关寄存器与堆栈中的 ] 内容

进程上下文切换发生在不同的进程之间而不是同一个进程内 : ① 保存当前进程状态至相关存储区. ② OS 中调度程序选取新进程. ③ 恢复新进程的状态.[ 资源分配, 原来上下文状态送至相关寄存器和堆栈中. ]
3.2.4 进程空间/50
进程空间也叫虚空间 : 即进程生存的地址空间. 由一些连续或不连续的存储块所组成,主要用于存储相应的进程映像
3.3 进程的状态及其转换 /51
进程具有三种基本状态:就绪状态(Ready)、执行状态(Running)和阻塞状态(Blocked)
- 就绪状态 ( Ready )
进程已获得除CPU 外的所有资源. 一旦被调度, 立马进入执行状态. 就绪状态的进程通常存在于就绪队列 [ 存放就绪状态的队列 ] 中.
- 执行状态 ( Running )
进程占有 CPU [ 正在执行 ]
- 阻塞状态 ( Blocked )
也称为等待队列. 进程缺少除了 CPU 以外的资源. 例如 I/O阻塞.

3.4 进程控制 /53
有些操作系统在 3 种状态间添加了其他状态. 经典的应该是五个状态转换图
//TODO 待补充.
3.4.1原语/53
在进程各状态之间的转换中,进程调度程序完成由就绪态转换为执行态. 那么其他状态之间的转换,如阻塞态转换为就绪态执行态或执行态转换为阻塞态,又是由谁完成?进程由什么程序创建、什么程序撤消?
由称为原语的程序完成的。
引入原语的目的是为了可靠地实现进程的通信和控制。
原语 : 是在系统态下执行的某些具有特定功能(如进程控制等)的程序段。原语均运行在系统态下,被高层软件所调用. 常用的进程控制原语有创建原语、撤消原语、堵塞原语、唤醒原语等
原语可分成两类:一类为机器指令级 [ 在其执行过程中不能被中断 ] ;另一类为功能级 [ 作为原语的程序段不允许并发执行 ]
3.4.2 进程的创建与撤销/53
略
//TODO 待补充脑图.
3.4.3进程的阻塞与唤醒/55
3.4.4进程的挂起与激活/57
3.5 线程/58
为了提高系统内程序执行的并发程度,减少进程切换所需时间, 1985 年左右, 人们又提出了比进程更小, 能独立运行的基本单位: 线程 Thread . 线程能更好地刻画程序执行的并行特性,充分发挥多处理机的优势
3.5.1 线程的基本概念及分类/58
线程是一个进程内的基本调度单位,也称之为轻权进程(Light Weight Process,LWP).
它可以由操作系统内核控制,也可以由用户程序来控制,是程序中的一个单一的顺序控制流。
仅拥有少量必不可少的系统资源(如寄存器等),但它继承其所属进程的所有资源,这样线程切换时仅涉及少量寄存器、堆栈等。所以线程切换迅速,是系统内开销最小的执行实体.
//TODO 进程线程区别 脑图
3.5.2 线程的状态及转换 /59

线程有三种基本状态:执行、就绪和堵塞,它没有进程的挂起状态 [ 线程只是一个与内存和寄存器相关的概念,它不会因交换而进入外存 ]
3.5.3 线程的应用 /60
3.6 Linux的进程模型 /61
3.6.1 Linux的进程控制块 /61
3.6.2 Linux进程的创建和撤销 /62
3.6.3 Linux进程的状态及其转换 /63
3.7 Linux系统的线程机制 /64
3.8 本章小结 /64
##第 4 章 处理机管理
处理机(Central Processing Unit,CPU)是计算机系统的运算、控制中心,其处理能力是评价计算机系统性能的重要指标
4.1 分级调度/67
对于不同种类的操作系统,CPU 的调度算法也不尽相同, 一般采用分级调度的方法实现 CPU 的有效分配 . 经典的是 CPU 四级调度 :作业调度、交换调度、进程调度和线程调度.
作业调度、进程调度存在于多道批处理系统中.
交换调度、进程调度和线程调度存在于分时系统和实时系统中.
分时系统和实时系统中不存在作业调度

4.1.1 作业调度 /68
处理对象是作业
作业调度又称高级调度
4.1.2 交换调度/68
处理对象是进程,作用域是内外存
交换调度也称为中级调度, 功能是在内、外存间进行信息交换 [ 即将内存中暂时不具备运行条件的进程挂起,将其交换到外存交换区中处于外存等待状态,空出内存空间以容纳外存中即将换入内存的、将要运行的进程,从而实现虚拟存储管理 ]
4.1.3进程调度/68
处理对象是进程, 作用域是内存中.
进程调度又称为低级调度或微观调度, 作用是协调和控制各进程对 CPU 的使用
两种方式 : 1 ) 抢占式 2 ) 非抢占式
4.1.4 线程调度 /68
线程通常分为用户级线程和核心级线程, 用户级线程最终还是要映射成核心级线程
用户级线程和核心级线程调度的方式是不同的。用户级线程由线程库进行管理和调度,并运行在一个可以得到的轻权进程上,这种模式称为进程局部调度。而核心级线程则由系统内核来调度,称之为系统全局调度。
4.2 作业调度和进程调度 /69
4.2.1 作业调度 /69
4.2.2进程调度/70
4.3 调度算法/72
作业调度和进程调度是 CPU 调度中的重要内容,它们的实现算法颇为相似
4.3.1 先来先服务调度算法/72
该调度算法既适合作业调度,也适合进程调度
先来先服务调度算法(First Come First Service ,FCFS): 按照后备作业进入后备队列的先后顺序排列,先进入后备队列的作业具有较高的优先级,可以优先获得调度。此时的后备队列为一个先进先出队列(First In First Out ,FIFO)

4.3.2 优先级调度算法 /72
该调度算法既适合作业调度,也适合进程调度。
优先级调度算法(priority scheduling)指系统按照某种准则为进程(作业)确定一个优先级,以表示该进程(作业)享有优先被调度的权利。
这种算法可以是抢占式的,也可采用非抢占形式。
该算法的核心是如何确定进程(作业)的优先级, 静态法和动态法

4.3.3轮转调度算法/73
轮转调度法根据每一轮的时间片是否可变又分为固定周期轮转法和可变周期轮转法。
轮转调度法特别适合分时系统使用,如果选择合适的时间片,系统的开销不会很大
如果时间片长度过长,比方说一个时间片能保证就绪队列中所需执行时间最长的进程能执行完毕,则轮转法变成了先来先服务法

4.3.4 分级轮转调度算法 /75
就是根据进程性质或优先级的不同将处于就绪状态的进程组成两个或多个就绪队列

轮转调度法适用于进程调度
4.3.5 分级反馈轮转调度算法 /76
分级反馈轮转调度算法(multilevel feedback queue scheduling)

4.3.6最短作业优先调度算法/77
最短作业(进程)优先算法(shortest job first, SJF)是指对短作业或短进程优先进行调度并分配CPU。

4.3.7响应比高者优先调度算法 /78



周转时间 = 等待时间 + 执行时间.

4.4选择调度方式和评价调度算法的若干准则/79
如下一些准则被建议用来评价处理机的调度算法 :
(1)CPU的利用率(CPU utilization)
(2)系统吞吐率(throughput)
(3)周转时间(turnaround time)
(4)带权周转时间(turnaround time with right)
(5)等待时间(waiting time)
(6)响应时间(response time)
(7)公平
(8)对资源的均衡使用
4.5 实时调度算法 /82
4.5.1 实时系统的特点/82
4.5.2 实现实时调度的基本条件/83
4.5.3实时调度算法的分类/83 .
4.5.4 常用的几种实时调度算法 /85
4.6 Linux的进程调度 /86
4.6.1调度的时机/87
4.6.2进程调度算法/87
##第 5 章 存储管理
本章讨论内存管理中所采用的技术主要包括:常用的内存管理方法以及相应所采用的内存分配和回收算法、内外存地址转换、内存数据共享与保护、内存扩充、覆盖技术、交换技术等。而有关外存管理方面的内容将在第7章文件系统中讨论。
5.1存储管理的功能/92
5.1.1内存的分配与回收/92
5.1.2地址转换/93
源程序经过编译或汇编后形成的目标代码中出现的地址,通常为相对地址 [ 即规定目标程序的首地址为零 ] . 而其它指令中的地址都是相对于首地址而定的,这种地址通常称为“逻辑地址”,有时也称为相对地址或虚拟地址。
虚拟存储器(virtual store 或virtual memory) : 逻辑地址组成的空间,也称虚拟空间。
物理地址 : 主存储器中各存储单元的编号, 有时也称为绝对地址。
物理存储空间 : 全部物理单元的集合.
地址重定位就是要建立逻辑地址与物理地址间的对应关系。
实现地址重定位或地址映射的方法有两种:静态地址重定位和动态地址重定位
静态地址重定位(static address relocation) : 是在程序执行之前由装配程序完成地址转换工作
优点是不需要硬件支持.
缺点 :
① 无法实现虚拟存储器 [ 静态重定位方法将程序一旦装入内存之后就不能再移动,并且必须在程序执行之前将有关部分全部装入内存 ] ;
② 必须占用连续的内存空间,这就难以做到程序和数据的共享。
动态地址重定位(dynamic address relocation) : 是在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。
缺点 : 动态重定位需要硬件的支持。
优点 :
(1)可以对内存进行非连续分配
(2)动态重定位提供了实现虚拟存储器的基础,以达到内存扩充的目的。
(3)各程序段可以分散存放在不同的内存区域,有利于程序段的共享。
5.1.3 内存信息的共享与保护 /94
内存中的许多用户或系统程序和数据段可供不同的用户进程使用,称为共享。这种资源共享将会提高内存的利用率。除了被允许共享的部分之外,要限制各进程只在自己的存储区中活动,各进程不能对别的进程的程序和数据段产生干扰和破坏,故需要实现内存信息保护.
常用的内存信息保护方法有硬件法、软件法和软硬件结合法
上下界保护法是一种常用的硬件保护法
保护键法也是一种常用的存储保护法
软硬件法结合是界限寄存器与CPU的用户态或核心态工作方式相结合的保护方式

5.1.4 内存的扩充/94
这里所说的扩充是指使用存储管理软件来实现内存在逻辑上的扩充,而不是利用硬件实现的。
通过这种内存扩充方式可以实现系统运行的作业大小只受内存容量和外存容量之和的限制,而不是有内存大小的限制,从而系统能够运行作业的大小得以增大
5.2 覆盖和交换技术 /95
覆盖技术和交换技术是在多道环境下用来扩充内存的两种方法
交换主要是在不同的进程或作业之间进行,而覆盖则主要在同一个作业或进程内进行。
另外,覆盖只能覆盖那些与覆盖程序段无关的程序段。
5.2.1 覆盖技术/95
一般程序具有两个特点:① 程序执行时有些部分是彼此互斥的 [ 即在程序的一次执行中,执行了这部分就不会去执行另一部分 ]
② 程序的执行往往具有局部性 [ 2 8 原则, 运行期 80% 时间在运行 20% 的代码. ]
基本思想是:把程序划分为若干个功能上相对独立的程序段,按照程序的逻辑结构让那些不会同时执行的程序段共享同一块内存区。

通常这些程序段都被保存在外存中,当有关程序段的先头程序段已经执行结束后,再把后续程序段调入内存覆盖前面的程序段。这使得用户看来,好像内存扩大了,从而达到了内存扩充的目的
5.2.2 交换技术/96
交换技术解决了啥问题?
现状 : 存在于内存中的作业或进程,有的处于执行状态或就绪状态,而有的则处于等待状态.
若存放在外存中, 从外存软磁盘读一块数据到内存有时要花0.1秒到1秒左右的时间。若存放在内存中,将会造成存储空间的浪费。因此,应该把处于等待状态的进程换出内存。这就是交换技术就是干这个的.
交换 ( swap ) : 指先将内存某部分的程序或数据写入外存交换区,再从外存交换区中调入指定的程序或数据到内存中来。
交换进程由换出和换入两个过程组成.
换出(swap out) : 过程把内存中的数据或程序换到外存交换区
换入(swap in) : 过程把外存交换区中的数据或程序换到内存分区中。
5.3 分区存储管理 /96
分区存储管理可分为单分区管理和多分区管理,多分区管理又分为固定分区管理和可变分区管理。
5.3.1 单分区存储管理 /97
单分区存储管理下用户区域作为一个连续的分区分配给一个作业使用

5.3.2 多分区存储管理/98
多分区的存储管理是把主存中的用户区划分成若干个连续区域,每个连续区中可装入一个作业
固定分区

可变分区


可变分区存储管理
① 最先适应
采用最先适应分配算法,可把空闲区按地址顺序从小到大登记在空闲区表中。于是,在分配时总是尽量利用低地址部分的空闲区,而使高地址部分保持有较大的空闲区,有利于大作业的装入。但是,这时每当有作业归还分区时,必须调整空闲区表,把归还区按地址顺序插入到空闲区表的适当位置。
② 最优适应
总是按作业要求挑选一个能满足作业要求的最小空闲区
③ 最坏适应
总是挑选一个最大的空闲区分割一部分给作业使用,使剩余部分的空闲空间不致于太小,仍可供分配使用. ( 最后效果可能是最好的. )
5.3.3 分区存储管理的评价 /105
5.4 页式存储管理/105
用分区方式管理主存储器时,每道作业都占用主存的一个连续的存储空间。因此,当主存储器中无足够大的连续空间时,作业或进程就无法装入,必须移动已在主存中的某些作业或进程后才能再装入新的作业或进程;这有做不方便,而且系统开销大。
是否可以把逻辑地址连续的作业或进程分散存放到几个不连续的主存区域中,但仍能保证作业或进程的正确执行?页式存储管理就是解决这一问题的一种存储管理方式。
页式存储管理方法分为静态页式存储管理和动态页式存储管理。
5.4.1页式存储管理的基本原理/106
页式存储管理需要硬件的支持.
首先把主存储器分成大小相等的许多块[ 也称为区 ],块是进行主存空间分配的物理单位。
程序的逻辑空间进行分页,页的大小与块的大小一致。 [ 此时 页 = 块 = 区 ]
作业或进程按页存放到块中

页式存储管理方法中使用了三种主要数据结构:页表、请求表和存储块表
空闲块表法是通过一张表记录内存中的空闲块
空闲块链法是通过一链表记录内存中的空闲块
5.4.2 静态页式存储管理 /107
静态页式存储管理采用动态重定位方式装入作业或进程
为了提高存取速度,通常把页表中的一部分内容存放在高速缓冲存储器(Cache)中,这部分页表称“快表”
5.4.3 动态页式存储管理 / 109
动态页式存储管理是把作业或进程信息作为副本存放在磁盘上,作业或进程执行时,把作业或进程信息的部分页面装入主存储器。作业或进程执行时,若所访问的页面已在主存中,则按静态页式存储管理方式进行地址转换,得到欲访问的主存绝对地址;若欲访问的页面不在主存中,则产生一个“缺页中断”(由操作系统把当前所需的页面装入主存储器中)

页面置换算法
常用的页面置换算法有随机置换算法、轮转置换算法、先进先出置换算法、最近最少用置换算法、最近最不常用置换算法、CLOCK置换算法和最佳置换算法
1)随机置换算法(random algorithm)
无法确定时, 随机调出也不失为一种明智选择.
2)轮转置换算法(round robin,RR)
3)先进先出置换算法(first-in first-out, FIFO)
利用栈,把驻留在主存中时间最长的那一页调出
4)最近最少用置换算法(least recently used,LRU)
如果某个内存页在最近一段时间里没有被访问过,则在最近的将来也可能暂时不会被访问, 选择调出
5)最近最不常用置换算法(1east frequently used,LFU)
选择被访问次数少的页面调出
6)CLOCK置换算法
由于它要求有较多的硬件支持,故在实际应用中大多采用LRU的近似算法。Clock算法就是用得较多的一种LRU近似算法。
// TODO 脑图中说明. 课本太啰嗦.
①简单的Clock置换算法
②改进型Clock置换算法
7)页面缓冲算法(PBA:Page Buffering Algorithm)
8)最佳置换算法(optimal replacement algorithm,OPT)
无法实现预测, 但可作为衡量各种具体算法的标准.
f=F/A 中断率 = 缺页中断 / 总次数.
5.4.4 页式存储管理的优缺点/116
5.5 段式和段页式存储管理 /117
5.5.1 段式存储管理/117
5.5.2 段页式存储管理 /120
5.6 Linux的存储管理 /121
5.6.1 物理内存的管理 /122
5.6.2 进程空间的管理 /124
5.6.3 Linux虚存的保护 /126
5.7本章小结/126
##第 6 章 文件管理
详情见第一章概述, 避免冗长
6.1文件和文件系统/130
6.1.1文件/130
无结构文件由于采用字符流方式,与源程序、目标代码等在形式上是一致的,适用于源程序、目标代码等文件的存储.
另一种文件形式是记录式文件,其基本信息单位是记录,由记录组成. 主要用于信息管理。

6.1.2 文件的分类 /131
6.1.3⁄文件系统/131
操作系统中与管理文件有关的软件和数据的集合称为文件系统.
它负责为用户建立文件,撤消、读写、修改和复制文件,还负责完成对文件的按名存取和进行存取控制,以及对外存储空间的管理
6.2文件的逻辑组织/132
6.2.1流式文件/132
6.2.2记录式文件/132
通常记录式文件有四种结构:连续结构、多重结构、转置结构、顺序结构。
注 : 不是很懂, 不考
######1)连续结构
连续结构是一种把记录按生成的先后顺序连续排列的逻辑结构。
2)多重结构

3)转置结构

4)顺序结构
把文件中的键按规定的顺序排列起来就形成了顺序结构文件。
6.2.3存取方法/134
常用的存取方法有三种:顺序存取法、随机存取法(直接存取法)和按键存取法
对键或记录的搜索属于表格搜索问题(table lookup)。用来解决表格搜索问题的算法可以大致分为三种类型:线性搜索法(linear search)、散列搜索法(hash coding)和二分搜索法(binary search algorithm)
6.3文件的物理组织/135
6.3.1 磁带文件的组织 / 135
磁带上的每个文件都有文件头标、文件信息和文件尾标三个组成部分
磁带上的文件适合于顺序存取方式下使用

6.3.2磁盘文件的组织/136
文件在磁盘上常用的组织方式有顺序结构、链接结构和索引结构。
1) 顺序结构

2) 链接结构
链接文件采用顺序存取方式是高效的,采用随机存取方式将是低效的

3) 索引结构

6.3.3记录的成组与分解/141
把若干个逻辑记录合成一组存入一个物理块的工作称“记录的成组”,每块中的逻辑记录个数称“块因子”
从一组逻辑记录中把一个逻辑记录分离出来的操作称“记录的分解”

6.4 文件目录/143
文件目录的组织和管理目的是方便检索和防止冲突。
目录项应包含如下内容:
1)有关文件存取控制的信息。例如,用户名、文件名、文件类型、文件属性(可读写、只读、只可执行等)。
2)有关文件结构的信息。例如,文件的逻辑结构、文件的物理结构、记录个数、文件在存储介质上的位置等。
3)有关文件管理的信息。例如,文件的建立日期、文件被修改的日期、文件保留期限和记账信息等
6.4.1 - -级目录结构(单级目录结构) /143

不能重名
6.4.2 二级目录结构/143
在二级目录结构中
第—级为主文件目录(Main File Directory,MFD),主文件目录以用户名为索引,对每个用户都设置一个指向用户文件目录(User File Directory,UFD)的指针。
第二级为用户文件目录,用户文件目录为本用户的每一个文件设置一个目录项

6.4.3 树形目录结构/144.
二级目录可以推广至树形目录[ 多级 ]

6.4.4 文件目录管理/145
6.5 磁盘存储空间的管理/146
常用的磁盘空间管理方法有位示图、空闲块表和空闲块链
6.5.1位示图/146

0 表示空闲, 1 表示占用.
6.5.2 空闲块表/146

适用于顺序结构文件
6.5.3空闲块链/147
-
单块连接
-
成组连接
6.6 磁盘容错技术 /148
容错技术是通过在系统中设置冗余部件来提高系统可靠性的一种技术。
**磁盘容错技术 **[ 系统容错技术 (System Fault Tolerance,SFT) ]通过增加冗余的磁盘驱动器、磁盘控制器等,来提高磁盘系统的可靠性,[ 磁盘出现缺陷或故障时,不致于造成数据的错误和丢失, 快速恢复工作 ]
SFT 可分为三个级别;SFT-1是低级磁盘容错技术,主要用于防止磁盘表面发生缺陷所引起的数据丢失;
SFT-2是中级磁盘容错技术,主要用于防止磁盘驱动器和磁盘控制器故障所引起的系统不能正常工作;
SFT-3是高级系统容错技术
6.6.1第一级容错技术 /148
// TODO 完成 7 8 章考点再回来吧.
6.6.2 第二级容错技术 /149
6.6.3 廉价磁盘冗余阵列 /150
6.6.4 后备系统 /151
6.7文件的使用 /153
6.7.1 文件的操作 /153
6.7.2 文件的使用 /154
6.8 文件的共享、保护和保密 /155
6.8.1 文件的共享 /155
6.8.2 文件的保护 /157
6.8.3 文件的保密 /158
6.9 文件的层次模型 /158
6.10 Linux的文件管理 / 160
6.10.1虚拟文件系统(VFS) /160
6.10.2 EXT2文件系统 / 164
6.11 本章小结 /166
##第 7 章 设备管理
本章是设备管理的基本概念,包括中断、通道、缓冲、设备分配和I/O控制,以及最常用的存储设备——磁盘的驱动调度等。
7.1设备管理概述/170
7.1.1设备的类别/170
不同角度, 分法多了去了.
按设备的使用特性,可将设备分为存储设备、输入/输出设备、终端设备以及脱机设备等

按信息交换的单位,可将设备划分字符设备和块设备。键盘、终端、打印机等以字符为单位组织和处理信息的设备被称为字符设备. 而磁盘、磁带等以字符块为单位组织和处理信息的设备被称为块设备.
按传输速度的高低,可将设备分为低速设备、中速设备和高速设备。
按设备的共享属性,可将设备分为独占设备、共享设备和虚拟设备。
7.1.2 设备管理的功能和任务 /171
7.1.3 数据传送控制方式 /172
外围设备和内存之间的常用数据传送方式有4种 : 程序直接控制方式、中断控制方式、DMA控制方式和通道控制方式。
- 程序直接控制方式
处理器根据用户进程程序中的I/O语句(或指令),向I/O设备(或设备控制器)发出一个I/O命令,称I/O操作
CPU大部分时间都耗费在等待数据信息传输完成的循环测试里, 极其浪费
2.中断控制方式
I/O操作由程序发起,在操作完成时(如数据可读或已经写入)由外设向CPU发出中断,通知该程序
3.DMA控制方式
由程序设置DMA控制器中的若干寄存器值(如内存始址,传送字节数),然后发起I/O操作,DMA控制器完成内存与外设的成批数据交换,在操作完成时由DMA控制器向CPU发出中断。这种控制方式的优点是:CPU只需干预I/O操作的开始和结束,而其中的一批数据读写无需CPU控制,适于高速设备。
4.通道控制方式
通道又称为I/O处理机,它能完成主存器和外设之间的数据传输,并与中央处理机并行操作
7.2 磁盘的驱动调度 /173
7.2.1 磁盘的结构 /174


各磁盘块的编号按柱面顺序(从0号柱面开始),每个柱面按磁道顺序,每个磁道又按扇区顺序进行排序。假定用T表示每个柱面上的磁道数,用S表示每个盘面上的扇区数,则第i柱面,j磁头,k扇区所对应的磁盘块号b可有如下公式确定:
b=k+S*(j+i*T)
同样地,根据磁盘块号也可以确定该盘块块在磁盘上的位置。在上述的假定下,每个柱面上有ST个磁盘块,为了计算第P块在磁盘上的位置,可以令D=ST,设M=[P/D],N=P mod D。于是,第P块在磁盘上的位置为:
柱面号=M
磁头号=[N/S]
扇区号=N mod S
7.2.2 磁盘的驱动调度 /175
磁盘来说,驱动调度有“移臂调度”和“旋转调度”两部分组成。
1) 移臂调度
常用的移臂调度算法有先来先服务算法、最短寻找时间优先算法、扫描调度算法、循环扫描算法、NStepSCAN 调度算法和FSCAN调度算法。
1)先来先服务调度算法(FCFS,First Come First Served)
// TODO 我记得之前王道笔记写的不错, 有空补上
2)最短寻找时间优先调度算法(SSTF, Shortest Seek Time First )
3)扫描调度算法 (SCAN)
// TODO 下面这段话应该是废话. 理解后可删除.
扫描调度算法与最短寻找时间优先调度算法都是尽量减少移动臂移动所化的时间,所不同的是最短寻找时间优先调度算法不考虑臂的移动方向,总是选择离当前读/写磁头最近的那个柱面的访问者,这种选择可能导致移动臂经常改变移动方向。扫描调度算法是沿着臂的移动方向去选择离当前读/写头最近的那个柱面的访问者,仅当沿臂移动方向无等待访问者时才改变臂的移动方向。由于移动臂改变方向是机械动作,速度相对较慢,相比之下,扫描调度算法是一种简单、实用且高效的调度算法。但是,在实现时除了要记住读/写磁头的当前位置外,还必须记住移动臂的移动方向。
4)循环扫描调度算法(CSCAN)
5)NStepSCAN和FSCAN调度算法(CSCAN, Circle SCAN)
①NStepSCAN算法
②FSCAN算法
2) 旋转调度

3) 信息的优化分布

因为存在处理延迟, 错过了下一个信息块就要继续等待. 优化等待时间的排序方式是 :

7.3 中断技术 /179
7.3.1 中断及其基本概念 /180
中断(interrupt) 是指计算机在执行期间,系统内发生非寻常的急需处理事件,使得CPU暂时停止当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被停止处继续执行或优先级高的新的进程执行的过程
引起中断发生的事件被称为中断源。
中断源向CPU发出的请求中断处理信号称为中断请求,
CPU收到中断请求后转相应的事件处理程序称为中断响应。
7.3.2 中断处理过程 /180
7.3.3 中断优先级与多重中断 /181
7.4 通道技术/182
7.4.1通道的引人/182
7.4.2 通道类型/183
7.4.3 通道指令和通道程序 /185
7.4.4 通道的工作过程 /186
7.5 缓冲技术 /187
7.5.1 缓冲的引人/187
7.5.2 缓冲的种类 /188
7.5.3 缓冲池的管理/188
7.6 设备分配/190
7.6.1 设备的独立性 /190
7.6.2 设备分配的原则/191
7.6.3 设备分配策略 /191
7.6.4设备分配所使用的数据结构和分配算法/191
7.7虚拟设备 /193
7.7.1虚拟设备的引人 /194
7.7.2 虚拟设备的实现 /194
7.8 I/O进程控制/197
7.8.1I/O控制 /197
7.8.2I/O控制的功能/197
##第 8 章 进程的互斥, 同步, 通信和死锁
进程和线程的管理是现代操作系统的主要功能,进程的互斥、同步、通信和死锁是进程管理所要解决的首要问题
多道环境中多个进程同时运行即所谓的并发性 Concurrency
并发性具体涉及如下几方面问题:进程间的协作和通信、对资源的共享和竞争、多个进程活动间的同步、进程间CPU时间的分配
8.1进程互斥 /207
8.1.1 临界区与进程互斥 /207
一时刻仅允许一个进程访问的共享资源称为临界资源 ( critical resource )
程序中使用某一临界资源的那段代码称为程序的临界区(critical section)
临界区按不同的临界资源划分为不同的集合,所有集合统称为类(class)
由共享公有资源而造成的对并发进程执行速度的制约称为间接制约
并发进程一方的执行结果互为对方的执行条件的这种制约关系称为直接制约
8.1.2 互斥的加锁实现 /209
有关临界区的互斥访问技术方面的研究开始于20世纪60年代
最简单的途径是采用对临界区加锁的方法来实现并发进程的互斥。
原语:lock(key[S])和unlock(key[S]),它们分别用于对临界区进行加锁和解锁操作
8.1.3 信号量和P、V原语/210
荷兰学者Dijkstra提出了信号量和P、V原语的概念。信号的概念出现于交通领域,它通过颜色的变化进行交通管理。
信号量只能由P、V原语对其进行操作,由此实现临界区的互斥进入。
8.1.4 利用P、V原语实现进程互斥 /212
8.2进程同步 /213
8.2.1进程同步的概念 /213
8.2.2 进程同步的实现消息发送/214
8.2.3 进程同步的实现P、V原语和信号量/215
8.2.4 进程同步的实现管程/215
尽管信号量为进程同步提供了一种即方便、又简单有效的实现机制,但每个要访问临界资源的进程自身都必须显式地给出P、V操作。
这样就使大量的同步操作分散在多个并发进程中,这不仅给编程造成了麻烦,也给系统的管理增加了负担。
而且信号量的不正确使用可能导致很难检测的定时错误,尽管这些错误是由于执行一些不常发生的特定序列所引起的。
为了克服上述问题,1971年Dijkstra提出一种方法,即把所有对某一临界资源的互斥和同步操作集中起来,构成一个“秘书”进程,对于该临界资源的所有访问都要通过该进程来实现 [ 程序简化思维. ]
1975年Hansen和Hoare将“秘书”进程的思想发展成管程(monitor)的概念,为实现进程同步提供了一种新机制
管程 : 定义了一个数据结构和能为并发进程调用的在该数据结构上进行操作的一组过程,这组过程能同步进程和改变管程中的数据 [ 类似 Netty 把 NIO 打包起来? ]
8.3 经典的进程同步互斥问题/217
8.3.1 生产者和消费者问题 /217
8.3.2 哲学家进餐问题 /219
8.3.3 读者和写者问题/222
8.3.4 理发师睡觉问题 /224
8.4 进程通信/226
进程的同步和互斥实质上也可归结为进程通, 称为低级通信
8.4. 1进程通信的类型 /226
目前,计算机系统中比较普遍采用的进程通信方式有三种:共享存储器、消息传递系统和管道通信
(1)效率低,生产者每次只能向缓冲池投放一个产品(消息),消费者每次只能从缓冲区中取得一个消息;
(2)通信对用户不透明。
8.4.2 消息传递通信/227
不论是单机系统、多机系统,还是计算机网络,消息传递机制是广泛采用的一种进程通信机制。在消息传递系统中,进程间的数据交换以具有一定格式的消息(message)为基本单位,该消息在计算机网络中被称为报文
消息传递系统根据实现方式的差异可分为两类:
(1)直接通信方式,简称消息缓冲通信
[ 发送进程将消息直接发送给接收进程,由操作系统将该消息挂在接收进程的消息缓冲队列上供接收进程读取 ]
(2)间接通信方式,简称信箱通信
[ 发送进程将消息发送到接收进程的信箱中供接收进程读取。这种方式广泛应用于计算机网络中。这种通信方式较为简单,由于信箱可以位于主存中,所以数据传输的速度较高 ]
3) 通信管道
管道是指用于连接一个读进程和一个写进程以实现它们之间通信功能的一个共享文件,又称为pipe文件。它是由UNIX系统首先提出的一种进程通信方式
管道通信方式具有如下特点:
(1)管道以文件为中间传输手段,因此可以进行大批量的数据传输。
(2)管道以字符流形式写入管道和读出,不必以消息为单位。
(3)管道以FIFO方式工作,先写入的数据先被读出。
以上三种进程通信方式都可以实现大量数据的传输,但通讯方式不同,需使用不同的控制方式实现进程间的同步和互斥
8.5 死锁/229
死锁是现代操作系统所必须解决但尚没有得到根本解决的问题。本结了解死锁的基本概念,分析死锁产生的原因,提出避免死锁发生的方法,以及当死锁发生时如何检测和恢复系统
8.5.1死锁的基本概念 /230
死锁是指一个进程集合,这些进程处于永久阻塞状态,它们正在竞争有限的系统资源或正在进行相互通信
产生死锁的原因
可以归结为两点:有限资源的竞争和并发进程推进的顺序非法.
死锁发生的四个必要条件。
(1)互斥条件。共享资源的使用是互斥的,某一段时间内共享资源只能被一个进程占用。如果此时其它进程也要求使用该资源,申请者必须阻塞,直到占有该资源的进程释放该资源后,它才能被唤醒。
(2)不可剥夺条件。进程所使用的共享资源在未用完之前,不能由其它进程强行剥夺,只能自己释放。
(3)部分分配。进程在申请新资源的同时,将继续占有已获得的资源,而申请的新资源此时却被其它进程所占有。
(4)环路条件。存在进程-资源循环链,链中每一个进程已占用的资源同时被下一个进程所申请。
8.5.2 死锁的解决方案和方法 /231
解决死锁的方案
(1)鸵鸟政策
在早期死锁发生概率低, 将精力放在解决主要业务需求上可能更重要.
(2)不让死锁发生
对资源的分配加以限制,使系统永远不会死锁。对资源分配的策略可以分为静态策略和动态策略。
(3)让死锁发生
发生后再采取措施.
解决死锁的方法
死锁的解决方法一般分为预防、避免、检测与恢复三种。
预防一般是从破坏导致死锁发生的必要条件着手,采用某种策略,限制并发进程对资源的请求,使得死锁的必要条件在系统运行期间得不到满足,从而预防死锁现象的发生
避免是指系统在为进程动态分配资源时,根据系统资源的使用情况,通过一定的算法提前对系统状态做出预测,避免死锁的发生,也称为动态预防
检测与恢复是死锁发生后的事后处理技术。它是指系统设有专门的机构,当死锁发生时该机构能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,使得并发进程从死锁状态中恢复出来
由于操作系统的并行性、共享性以及随机性等特点,很难通过预防和避免方法达到排除死锁的目的,故一般都采用检测与恢复的方法。
8.5.3死锁的预防/232
(1)破坏互斥条件
(2)破坏“不可剥夺”条件
(3)破坏“部分分配”条件
(4)破坏“环路”条件
8.5.4 死锁避免的方案一 银行家算法 /234
1) 数据结构
1)可用资源向量Available
2)最大需求矩阵Max
3)分配矩阵Allocation
4)需求矩阵Need
// TODO 王道讲得不错. 待补充.
8.5.5 死锁检测与恢复/237
1) 资源分配图

2) 死锁定理
死锁定理 S为死锁状态的充分必要条件是S的资源分配图不可完全约简
3) 死锁检测算法
4) 死锁检测时机
5 死锁的恢复
(1)重新启动(systemrestart)
(2)终止进程(terminatingprocesses)
(3)剥夺资源(preemptingresources)
(4)进程回退(prOCeSSrollback)
8.6 Linux中的线程同步/244
在Linux中,线程实际上就是进程,所以以前讨论的进程同步机制均可用于实现线程同步。Linux中所提供的主要线程同步机制有:自旋锁、信号量和条件变量
8.7 Linux中的进程通信机制/245
8.7.1 管道/245
8.7.2 System V的IPC通信机制 /246
参考资料
- <操作系统教程 ( Linux 版 )> 毛玉萃, 牛玉军, 赵宏伟 编著.
- <操作系统-考研复习指导> 王道 2019 版