北邮 操作系统(一)

前言

操作系统基本知识点链接:操作系统-语雀,语雀主要跟的是B站王道视频,本博客主要参考哈工大教材和王道操作系统,最后的期末复习主要针对北邮徐梦玮老师的OS课程。
徐老师的课程对完全不懂OS的同学来说可能会有一些难度(而且徐老师给的参考书用来自学也是真的难),所以我的学习建议是课下找空余时间看王道或者哈工大的课程视频,形成基本的OS体系结构之后再看徐老师的课堂录屏(我们这一届有不知道其他届还会不会有,没有就只有课前预习上课好好听),徐老师讲的知识点属于是比较独特的,所以在网上相关资料可能比较少,如果是为了应付考试可以直接看期末复习篇,如果是为了学懂建议循序渐进。

1.导论

从宏观的鱼度看,可以计算机系统分成三个基本组成部分:底层的计算机硬件、中间层的操作系统以及上层的计算机应用程序,操作系统属于承上启下的中间层,所以它在计算机系统中的地位和作用尤为重要;

操作系统是计算机系统中最基本的系统软件;

操作系统的层次结构如下,可以认为对操作系统来说,用户和应用进程等价,都是其服务对象;

之后的课程将主要介绍操作系统中的六个基本模块,即CPU管理、内存管理、外设管理、磁盘管理与文件系统、用户接口和启动模块,以及这些模块之间的内在联系;


Q:处理机和CPU有什么关系,是等价的吗?

A:可以简单的认为处理机=CPU+存储器+I/O接口,所以对于单核CPU等价于只有一个处理机;


2.基本概念

  • PC寄存器:程序计数器,保存程序指令当前执行的位置;
  • CS寄存器:段寄存器
  • IP寄存器:段内偏移寄存器
  • BIOS:基本输入输出系统,是一段ROM,其中放置的代码是对基本硬件的测试代码,同时提供一些让用户调用硬件基本输入输出功能的子程序;
  • DS:SI:DS和ES是段寄存器,SI和DI是变址寄存器,DS和SI组成DS:SI,ES和DI组成ES:DI,DS:SIES:DI表示相关寄存器所引用的segment:offset;

第一章 系统启动

操作系统的理解从“走进操作系统开始”,系统启动无疑是操作系统的第一层面纱(本章最好参考王道视频,哈工大的教材有点过于偏向实操反而忽略了很多基础的知识点);

1.什么是操作系统

操作系统就是安装在计算机硬件之上的一个实实在在的软件,人们通过这个软件可以方便而高效地使用计算机硬件。

(1)操作系统是安装在计算机硬件之上的一层软件;

(2)操作系统之上可以安装各种应用程序软件;

(3)用户可以通过应用程序软件来间接使用操作系统,也可以直接使用操作系统,但通常都是通过操作系统来最终使用计算机硬件的;

(4)直接使用操作系统的含义就是让用户通过编写程序来调用操作系统提供的系统接口从而进入操作系统,而图1.1中的应用程序软件就是为调用这些系统接口而编写的程序;

(5)用户通过系统接口进入操作系统后使用计算机硬件,即用户必须“穿过”操作系统才能使用计算机硬件;

(6)操作系统管理计算机硬件,目的是让用户对计算机硬件的使用更加简便,也更加高效;

总结:操作系统是硬件和用户/应用之间的桥梁,操作系统管理硬件,为应用和用户提供服务;


操作系统在管理CPU的时候,抽象出来一个基本的概念——进程,因此CPU管理就变成了进程管理;操作系统在管理磁盘等外部设备的时候,又抽象出来一个被称为文件的基本概念,这样磁盘管理又变成了文件系统

一个基本操作系统包含如下四个基本管理模块:进程管理、内存管理、I/O管理以及文件系统,再加上提供给上层应用的系统接口,就形成了如图1.3所示的操作系统结构(这只是最基本的操作系统结构,各种操作系统都是在其基础上迭代演化)

1.1 操作系统的功能

我们可以认为操作系统在整个计算机系统中扮演如下角色:

  • 裁判:让应用之间隔离使用资源(用户态和内核态的设计);
  • 魔法师:让应用感受到似乎独占所有的硬件资源;
  • 胶带:缝合了上层应用和底层硬件之间的gap,包括硬件的接口会改变、硬件的功能会进化、应用也会改变,操作系统给应用提供了一个统一的接口;

1.2 操作系统的特征

操作系统是一种系统软件,操作系统的基本特征包括并发、共享、虚拟和异步;


Q:系统软件和应用软件的区别?

A:

  • 系统软件负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件有如下:
    • 操作系统,操作系统管理计算机的硬件设备,能够使应用软件方便,高效地使用这些设备;
    • 语言处理程序,语言处理程序有汇编语言,汇编器,连接器等;
    • 数据库管理系统,数据库管理系统是一种操纵和管理数据库的大型软件,用于建立,使用和维护数据库;
  • 应用软件是电脑软件的主要分类之一,是为满足用户不同领域,不同问题的应用需求而提供的那部分软件。应用软件有如下:
    • 办公软件,有图片商场,梦想编织者等;
    • 图像处理软件,有绘声绘影,数码大师,影视屏王等;
    • 翻译软件,有金山词霸,有道词典等;

1.2.1 并发

操作系统的并发性是指计算机系统中“同时”存在多个运行的程序,它具有处理和调度多个程序“同时”执行的能力;


Q:并发和并行的区别?

A:

  • 并发:同一时间间隔
  • 并行:同一时刻

基于单处理机的背景,实际上每个时刻仅能有一道程序执行,在一段时间内,宏观上有多道程序在同时执行,微观上这些程序仍然是分时交替执行的 —— 操作系统的并发性是通过分时得以实现的;

而并行性需要有相关硬件的支持,要么是多流水线,要么是多处理机硬件;


1.2.2 共享

共享也就是资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用,共享可分为以下两种资源共享方式:

  • 互斥共享方式:规定在一段时间内只允许一个进程访问资源,将在一段时间内只允许一个进程访问的资源成为临界资源或独占资源;
  • 同时访问方式:“同时”通常是指宏观上的,微观上这些进程可能是交替地对资源进行访问,即“分时共享”;
1.2.3 虚拟

虚拟是指将一个物理上的实体变为若干逻辑上的对应物;

操作系统利用了多种虚拟技术来实现虚拟处理器、虚拟内存和虚拟外部设备等:

  • 利用多道程序设计技术把一个物理上的CPU虚拟为多个逻辑上的CPU(即分时使用一个处理器),称为虚拟处理器;
  • 将用户感受到的存储器称为虚拟存储器(实际存储器我们编程的时候根本接触不到);

简单来说,操作系统的虚拟技术可以归纳为:时分复用技术(处理器的分时共享)和空分复用技术(虚拟存储器)

1.2.4 异步

异步是在多道程序环境下允许多个程序并发执行极有可能导致的进程与时间有关的错误,操作系统可以解决多道程序引发的异步问题,保证多次运行进程后都能获得相同的结果;

1.3 操作系统的接口

操作系统系统了一系列接口为用户服务,主要分为两类:

  • 命令接口:用户利用这些操作命令来组织和控制作业的执行,使用命令接口进行作业控制的主要方式有两种,按照控制的方式可将命令接口分为两类
    • 脱机控制接口:脱机命令接口又称为批处理命令接口,适用于批处理系统,批处理类比于雇主将工人需要做的事写在清单上,工人按照清单命令逐条完成这些事;
    • 联机控制接口:又称为交互式命令接口,适用于分时或实时系统的接口,雇主说一句话工人做一件事并反馈,强调交互性;
  • 程序接口:编程人员使用它们来请求操作系统服务,实际上就是系统调用;

2.操作系统的历史

简单的批处理系统

“批处理”工作模式即计算机逐个执行每个任务,每个任务只有在执行完毕或出错以后才会切换去执行下一个任务;

批处理操作系统的任务就是在当前程序执行完毕或出错时,将下一个程序读入内存,并将程序执行指针设置为 放置下一个计算任务第一句代码所在的内存地址;

这样的操作系统实际上只能算是一个监控小程序,远不能算作是操作系统;

多道程序系统

假设有JOB1和JOB2,JOB1涉及外存的使用非常耗时,JOB2只进行科学计算;

多道程序的概念是指,可以同时启动JOB1和JOB2两个任务。首先执行J0B1,当其执行到外存读写操作时,CPU向外存发出操作指令后记住JOB1的当前执行状态,然后CPU切换到JOB2去执行,当J0B1的外存读写操作完成时,CPU保存JOB2当前的执行状态并切换回到JOB1,从那个保存下来的执行状态处继续执行;

多道程序是指计算机系统中有多个程序“同时”向前推进(这里的同时加引号是因为只有一个CPU,同时仅仅只是宏观上的感觉)

分时处理系统

在多道程序的基础上,MULTICS为了解决多个用户共同使用一台计算机的资源共享问题,让每一个用户启动的计算任务对应一个多道程序,通过切换让每个用户的任务都得到执行,同时引入“时间片”的概念,使得每个用户被分配到一个固定大小的时间片T,用完这个时间片后将CPU切换给下一个用户;

总结

根据操作系统的发展历史,可以总结出操作系统的核心轮廓,即多进程视图文件视图

无论操作系统如何演进,操作系统的基本思想——多道程序一直没有改变过,这依赖于现代计算机都以“存储程序”思想作为基本结构;因为程序执行和未执行的状态差别非常大,所以针对执行中的程序定义了进程的概念,也因此CPU在多个程序之间来回切换就变成了在多个进程之间不断交替执行,也就是著名的多进程切换视图

文件视图简单来说就是将所有的计算机外部设备都统一抽象成文件(类似于Linux“一切皆文件”的思想)

多进程视图让CPU和内存高效运转,用户程序在文件视图下使用各种外部设备,因此在多进程视图和文件视图下,整个计算机硬件系统不断高效运转,操作系统也就完成了其对计算机硬件的管理。因此,多进程视图和文件视图构成了操作系统的完整轮廓;

3.操作系统启动过程

3.1 计算机工作原理

计算机本质上是一个计算模型,最著名的计算模型是图灵机

简单图灵机

模拟大脑->笔->纸张的计算过程,图灵机由控制器、纸带以及连接两者的读写指针组成

通用图灵机

当然简单图灵机只能做非常简单的加法、减法等单一的操作,简单图灵机经过演化得到通用图灵机

类比厨师做菜,简单图灵机就只是一个只会做一道菜肴的普通厨师,一个能看懂菜谱的厨师对应可以修改的控制器,不同的菜谱(做菜的步骤)对应设置控制器动作(这也就是现代计算机中的程序),数据对象对应按照菜谱做出的菜肴;

总结

通用图灵机已经非常接近现代“冯诺依曼”体系的计算机,我们可以得出结论,计算机的工作原理无非四个字——取值执行

3.2 启动操作系统

(这一章我们可以参考汇编语言汇编语言 - Tintoki_blog (gintoki-jpg.github.io)

操作系统启动的主要工作就三项:系统准备、系统初始化和系统运转进入shell;系统准备又包括读入内核、启动保护模式、启动段页等,图1.30给出了系统启动过程的基本轮廓;

3.2.1 BIOS

BIOS是计算机启动以后第一个运行的软件,和普通软件和操作系统都不一样,通常放在不可改的存储器上面,被称为固件;

BIOS通常会执行以下操作:

BIOS实际上已经是历史,下面介绍BIOS的继承者UEFI

3.2.2 Bootloader

bootloader是OS的一部分,一般认为OS=bootloader+kernel,是第一个用户可以自定义的程序;

bootloader主要执行以下工作:

关于BIOS和Bootloader这里简单做一个区分,尽管这两个概念几乎不会混淆


Q:为什么BIOS不直接load整个OS的kernel?

A:因为BIOS只能load很小的一部分的数据(历史的包袱),并且BIOS需要保持最简化的功能(固件最简化),所以BIOS一般都是load bootloader之后进而load整个OS的kernel;

3.3 实模式和保护模式

文章参考(29条消息) x86架构实模式和保护模式_liuxinux的博客-CSDN博客

X86架构是Intel较早出的CPU(8086、80286等16位以及之后的32位都属于这个架构),现在的64位CPU被称为X64(至于是AMD的还是Intel的就不要太纠结了),其他的ARM架构等不在我们的讨论范围中;

现在我们来介绍为什么会有实模式real model和保护模式protected model这两个模式;

之所以会出现这两个模式是由于历史的包袱 - 因为硬件不断演化,操作系统需要兼容,甚至硬件之间也要相互兼容,因此诞生了这两个CPU运行模式,实模式下一般只能访问16bit的数据,保护模式能够兼容16bit并访问更高位数的数据,并且保护模式能够真正的保护进程的一些信息;

保护模式又被称为虚地址保护模式,是在80286系列之后出现的一种CPU操作模式,在此之前只有实模式,为了兼容,现代计算机上电后CPU首先会在实模式下再转换为保护模式;

下面的表格简单展示了实模式和保护模式的区别

3.3.1 实模式

CPU实模式的内存寻址方式为分段寻址(段地址*16+段内偏移);

要注意寻址的概念不是操作系统专有(操作系统寻址最终还是对硬件进行操作),当数据存放在内存中的时候,我们称定位内存单元地址的方法为寻址,不管寻址方式如何,最终的内存中的物理地址都是一个整形的数值;

3.3.2 保护模式

CPU保护模式脱胎于32位CPU,这意味着保护模式下CPU可以利用232的内存区域,而如今流行的64位CPU的内存空间几乎是无限大;

32位CPU除了能够寻址32位的地址以外(16位CPU可以寻址20位),还发展出了很多的功能,与现代操作系统相辅相成,例如内存保护,分页系统,以及硬件支援的 虚拟内存,拥有这么多的功能,硬件自然要提供很多机制才能实现出来,这就叫做保护模式;且保护模式下可以防止程序之间互相访问带来的问题;

因为保护模式利用了更大的内存空间,所以其寻址方式相较于实模式更加复杂,其段寄存器不再是一个单纯的段基址而是一个指向数据结构的指针;保护模式下的寻址方式主要有分段模式和分页模式;

(1)全局描述符表GDT

GDT是在保护模式下一个必不可少的数据结构,同时在系统中只能是唯一的;

实模式下对内存地址的访问通过段基址:段内偏移实现,保护模式下内存的管理模式分为段模式和页模式(页模式基于段模式,也被称为段页式);

段模式下对一个段的描述包括3个因素[段基址,段最大长度,访问权限],我们将该64bit长的数据结构称为段描述符,而寄存器始终是16bit的,因此只能将这些长度为64bit的数据结构放在一个数组中,该全局可见数组就是GDT(事实上GDT不仅存了段描述符,还有其他描述符);

GDT可以存放在内存的任何位置,GDTR寄存器专门用于存放GDT的入口地址,之后CPU就可以根据该寄存器中的内容作为GDT的入口来访问GDT;

(2)局部描述符表LDT

除了GDT,Intel 32位体系架构还支持构建与GDT类似的数据结构LDT(每个进程的段表实际就是LDT):

  • LDT可以在系统中存在多个;
  • 它们只对引用它们的任务可见,每个任务最多有一个LDT;
  • LDT作为一个段存在,其段描述符放在GDT中;

同样的,Intel 32位架构提供了LDTR寄存器来保存LDT的入口地址(全局只需要一个);

GDT表描述的是操作系统的代码段、数据段等(主要存放操作系统和各任务公用的描述符),LDT表用来描述每个进程的代码段、数据段等;

3.3.3 其他

文章参考实模式:奇葩的存在 - 心渐渐失空 - 博客园 (cnblogs.com),这里主要补充介绍一下为啥现在的计算机有实模式和保护模式(前面可能介绍的比较敷衍,这里详细说一下);

作为操作系统中奇葩的存在,电脑启动时CPU在实模式,启动过程中的某个阶段会切换成保护模式;

传统的16位处理器启动时就是在实模式,也就是纯裸的,没有任何支持。32位处理器为了兼容16处理器,把开机时的实模式也兼容了,所以即使是16位的操作系统,放到32位处理器上,仍然能运行。所以开机的时候CPU就是实模式,然后32位操作系统又将实模式切换成保护模式。如果发现是16位的操作系统,就直接运行在实模式好了。实模式的存在就能兼容之前的16位程序。

4.操作系统的运行环境

CPU通常会执行两种不同性质的程序:

  • 一种是操作系统内核程序(简称管理程序,可以理解为系统软件的组成);
  • 一种是用户自编程序(简称应用程序,可以理解为应用软件的组成);

对操作系统而言,前者是后者的管理者,因此“管理程序”会使用一些“应用软件”不允许执行的特权指令如I/O指令、置中断指令等;

具体实现就是将CPU的状态划分为用户态和核心态,使得用户自编程序运行在用户态,操作系统内核程序运行在核心态;

4.1 操作系统的内核

一些与硬件关联比较密切的模块如时钟管理、中断处理等;其次是运行频率较高的程序如进程管理、设备管理等,这两部分内容构成了操作系统的内核 —— 这部分的指令操作工作在核心态,内核是计算机上配置的底层软件;

内核是不能直接使用的,如Linux内核,必须包装(添加C库、C编译器、绘图软件等应用软件)之后才能给用户使用;

不同的系统对内核的定义有区别,大多数操作系统内核包括:

  1. 时钟管理:时序发生器是计算机最关键的设备,系统管理的方方面面都依赖于时钟;
  2. 中断机制:现代操作系统是靠中断驱动的软件;
  3. 原语:原语是指一系列特殊的程序,这种程序的运行具有原子性 —— 定义原语最直接的方法就是关闭中断,使其所有动作不可分割地完成后再打开中断;
  4. 操作系统管理和处理数据结构:为了对系统中的数据结构实现有效的管理,系统(本博客中的系统默认情况下都是指操作系统)需要一些基本的操作:
    • 进程管理
    • 存储器管理
    • 设备管理

Q:程序和软件的区别是什么?

A:简单来说,软件=程序+文档=数据结构+算法+文档


4.2 中断和异常

上面我们提到,操作系统引入了核心态和用户态两种工作状态,这里我们讨论这两种状态如何切换:

  • 中断是唯一让用户态切换到核心态的方式;
  • 核心态转换为用户态只需要修改程序状态字PSW的标志位(通过执行特权指令来修改);

当用户程序需要使用一些核心态的功能时,就需要借助一些建立在核心态的“门”以便实现从用户态进入核心态,实际操作中唯一能够进入这些gate的途径就是通过中断或异常;

发生中断或异常时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的(一位寄存器0表示核心态、1表示用户态)

4.2.1 中断的定义
  • 中断也称外中断(外设请求、人工干预),指来自CPU执行指令以外的事件发生(I/O中断、时钟中断),这一类中断通常是与当前指令执行无关的事件;
  • 异常也称内中断(例外、陷入),指来自CPU执行指令内部的事件(程序非法操作码、地址越界),对异常的处理通常依赖当前程序的运行现场,且异常不能被屏蔽,一旦出现应当立即处理;
4.2.2 中断处理过程

中断(默认情况下所说的中断都是指外中断)处理流程大致如下:

  • 关中断;
  • 保存断点;
  • 引出中断服务程序;
  • 保存现场和屏蔽字;
  • 开中断;
  • 执行中断服务程序;
  • 关中断;
  • 恢复现场和屏蔽字;
  • 开中断、中断返回;

上述流程我们在 计组期末复习笔记 - Tintoki_blog (gintoki-jpg.github.io) 有详细介绍;

5.操作系统的体系结构

操作系统在核心态应当为应用程序提供什么样的公共服务?主要有两种主要的体系结构解答:大内核和微内核;

5.1 大内核和微内核

  • 大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务;
    • 由于复杂的交互关系使得层次之间的界限极其模糊,定义清晰的层次间接口非常困难;
  • 微内核将内核中最基本的功能保留在内核,将那些不需要在核心态执行的功能移到用户态执行;
    • 微内核结构最大的问题是性能问题,需要频繁在核心态与用户态之间进行切换;
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坂.y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值