【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史

在中国大学MOOC上学习操作系统
希望看视频可以直接点击 哈工大-操作系统课程MOOC

什么是操作系统

  1. 是计算机硬件和应用之间的一层软件
    【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第1张图片

  2. 帮我我们高效地使用硬件,比如开多个终端

  3. 可以管理CPU、内存、终端、磁盘、文件、网络、电源、多核心/分布式硬件

要学什么

  1. 操作系统提供的接口
    printf;使用CPU:fork;使用文件:open、read
  2. 能理解真实操作系统的运转
    一段文字是如何写到磁盘上的
    printf(“hello”)到底怎么回事
  3. 设计并实现操作系统
    这个就有点难了…,能修改或者扩展就可以。

揭开钢琴的盖子

计算机架构

简单图灵机

计算机是计算模型的实现。
图灵机类似人脑在用笔计算在纸上的内容:
控制器相当于人脑,读操作和写操作相当于眼睛和笔,存储器相当于纸。
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第2张图片
显然上面的例子只能算加法,先读出被加数(3)和加数(2),再读操作(+),然后写入计算内容。

通用图灵机

对于控制器的推理,进行抽象:
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第3张图片
可以看出来核心就是设置控制器的动作,可以理解成程序。

现代计算机

在通用图灵机的基础上,冯·诺依曼发明了存储程序的思想,因此也被称为现代计算机之父。
(题外话:图灵被称为计算机之父,冯·诺伊曼被称为现代计算机之父)
需要注意的是

  1. 核心思想就是将程序和数据存放到计算机内部的存储器(内存)中,计算机在程序的控制下一步一步进行处理
  2. 计算机的五大部件:
    1. 输入设备
    2. 输出设备
    3. 存储器
    4. 运算器
    5. 控制器

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第4张图片
(题外话:那个IP指针有时候也被称为PC指针,就是那个PC -> PC + 1)

计算机的工作步骤:

  1. 将程序读进内存
  2. PC指针指向程序
  3. 取出指令并执行指令
  4. PC指针继续指向下一条

计算机的第一条指令(自下而上学习)

打开电源后,计算机执行的第一句指令是什么?(PC指向了谁?)
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第5张图片
对于x86 (intel)计算机:(这段太干货了,对应下面的代码)

  1. x86 PC刚开机时CPU处于实模式
    注释:
    • CPU复位(reset)或加电(power on)的时候以实模式启动
    • 实模式和保护模式都是CPU的工作模式,而CPU的工作模式是指CPU的寻址方式、寄存器大小等用来反应CPU在该环境下如何工作的概念。
  2. 开机时,CS=0xFFFF;IP=0x0000
    CS:段寄存器,IP:段内偏移
  3. 寻址0xFFFF0(ROM BIOS映射区)
    ROM中的内容是被固化在里面的,BIOS(Basic Input Output System),给内存一个最基本的内容
    为什么寻址0xFFFF0?CS << 4 + IP 结果就是这个地址。
  4. 检查RAM、键盘、显示器、软硬键盘
    其实这几个也是计算机主板上的最重要的几个硬件
  5. 将磁盘0磁道0扇区读入0x7c00处
    0磁道0扇区,又称操作系统的引导扇区。
  6. 设置CS=0x07c0,IP=0x0000

上述的所有内容可以精简成一句话:从磁盘引导扇区读出最初的512字节的内容。

  1. 引导扇区就是启动设备的第一个扇区
  2. 启动设备信息被设置在CMOS中(用来存储实时钟和硬件配置信息)
  3. 硬盘的第一个扇区存放着开机后执行的第一段我们可以控制的程序
  4. 自此,操作系统开始运行

后面课程老师讲解了x86引导操作系统启动的具体汇编代码,这里就直接跳过了。
在这个引导过程中初始化了GDT、IDT、mem_map等重要数据结构:
GDT,即全局描述表(GDT Global Descriptor Table)。
IDT,Interrupt Descriptor Table,即中断描述符表,和GDT类似,他记录了0~255的中断号和调用函数之间的关系。
mem_map是一个数组,存放了所有的页描述符。一个页对应一个页描述符。

操作系统接口(自上而下学习)

引导完成后,内存中会形成下面这样的结构:

  1. OS会在0号地址
  2. 接着是GDT、IDT等数据结构的位置
  3. 如果未来操作系统启动后,APP将在很上面
    【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第6张图片

用户使用计算机

操作系统的接口显然不是对用户开放的,用户可以借助但不限于以下方式使用计算机:

  1. 命令行
  2. 图形按钮
  3. 应用程序
    【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第7张图片
命令行

下面的代码就可以实现一个命令行:
使用死循环来不断等待用户输入,然后得到输入以后进行执行。
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第8张图片
printf是如何实现的?
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第9张图片

图形按钮

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第10张图片

消息循环也是一个类似上边shell的死循环,不断地从内核中读取消息然后调用消息处理函数。

什么是操作系统接口?

回到上面我们可以知道:
命令行:命令程序
图形界面:消息框架程序 + 消息处理程序
可以看出来,用户使用计算机的方式,依然不是直接面向操作系统接口,而是通过某些程序来对计算机进行控制,而这些程序就使用了操作系统的某些重要的函数,这些函数被称为操作系统接口
接口表现为函数调用,又由系统提供,所以又被称为系统调用(System Call)

系统调用举例

以POSIX(Portable Operating System Interface of Unix,可移植操作系统接口,IEEE制定的一个标准族)为例:
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第11张图片
(题外话:Linux的发行版没有正式认证POSIX,但很兼容POSIX标准)

系统调用的实现

实现一个whoami系统调用

用什么写?

显然不是通过C语言来写:
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第12张图片

内核态与内核段

  1. 一定要将内核程序和用户程序相隔离:硬件设计
  2. 内核态可以访问任何数据,用户态不可以访问内核数据
    【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第13张图片
    DPL: 全称descriptor privilege level,存放在段描述符中,用于表示段的特权级,可以在GDT中取得。
    CPL:全称current privilege level,存放在代码段寄存器中(cs),代表当前执行程序的特权级
    RPL: 全称request privilege level,请求特权级,存放在段选择子中。
    CPL应该小于等于DPL才可以访问内存段的全部,可取的值为0,1,2,3,其中0属于内核态,1、2属于OS服务,3属于用户态。
    对于上面的whoami例子,main函数就是3,whoami在被main调用时是3,在系统调用时是0。因此如果main函数调用whoami,就会导致DPL

硬件提供了“主动进入内核的方法”

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第14张图片

中断指令(对于intel x86是int指令):
  1. 中断指令可以将CS中的CSL改为0,直接进入内核
  2. 这是用户调用内核代码的唯一方式
系统调用核心:
  1. 用户程序中包含一段包含int指令的代码
  2. 操作系统写终端处理,获取想调用的程序的编号
  3. 操作系统根据编号执行相应的代码。

中断指令由C语言提供的库函数来调用。
可以理解为操作系统允许用户在"一定程度上"操作内核。
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第15张图片

Linux对系统调用的实现

使用宏来展开一段带有int指令的系统调用,内嵌了汇编语言。
在这里插入图片描述

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第16张图片
后边老师又讲了一部分汇编语言的知识,跳过

int 0x80中断(80号中断)的处理

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第17张图片
大致的意思是:
int 0x80 将DPL置为3,穿过操作系统调用sys_write。

printf流程

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第18张图片

实现whoami的架构【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第19张图片

操作系统历史(当个故事看看)

批处理系统(Batch System)

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第20张图片

  1. 批处理系统只专注于计算。
  2. 监控系统发现当一个任务出错时,立刻将PC指针指向下一个任务的起始位置,并向磁带写入错误信息(写入较慢,I/O操作的成本比较高)。

多道程序系统(Multiprogramming System)【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第21张图片

  1. 一台计算机可以执行多个任务
  2. 多道程序(multi-programming)设计(多进程结构和进程管理概念萌芽)
  3. 作业之间的切换和调度成为核心:即有I/O任务,又有计算任务,需要让CPU的利用率变高。

分时系统(Time Sharing System)

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第22张图片

  1. 如果每个人启动一个任务,作业之间快速切换,和多道程序系统没有什么本质区别。
  2. 核心仍然是任务切换,但是资源复用的的思想对操作系统影响很大,虚拟内存就是一种复用。
  3. 这对服务器很重要,因为服务器有很多用户,PC基本上只有一个用户在使用。

多进程系统(MultiProcess System)

UNIX

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第23张图片
小型机(虽然叫小型机,但也并非PC机)开始出现
UNIX并非一类操作系统,而是一个划时代的操作系统。

Linux

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第24张图片
比如安卓系统的内核就是Linux,像一些Linux发行版比如Ubuntu、CentOS、RedHat都是Linux的分支、

小结1

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第25张图片
操作系统发展的核心思想:

  1. 用户通过执行程序来使用计算机(来自冯诺依曼的思想)
  2. 操作系统要让多个程序合理推进,这就是进程管理。
  3. 多进程/多用户推进时需要内存复用

PC机与DOS(Disk OS)

CP/M

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第26张图片
注意:上面的QDOS不是Q - DOS,DOS的D指的是Disk。

MS-DOS

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第27张图片
MS-DOS就是WIndows的底层支持,那个背景蓝色的类似命令行的操作系统。

Windows

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第28张图片
自此有了图形化界面(GUI),计算机使用起来更方便了。

Mac OS 与 iOS

【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第29张图片
感觉这两个操作系统更多的关注移动设备,能耗成了一个重要的指标。

小结2

  1. 操作系统的核心仍然是程序执行、多进程、程序带动其他设备使用。
  2. 用户体验被重视了,文件、编程环境、图形界面。

总结

操作系统的学习有着两个“图像”:

操作系统管理硬件,方便我们使用。

  • 多进程图像:涵盖CPU、内存
  • 文件图像:涵盖I/O、磁盘
    【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第30张图片

设备管理

设备的表格进行了初始化,等待用户的设备使用(系统调用),将其展开成设备细节。
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第31张图片

管理的资源

下面标注的四个“管理”恰好也是后面需要学习的部分。
【基础学习】操作系统学习笔记 - 操作系统基础:简介、计算机架构、系统调用、操作系统历史_第32张图片

你可能感兴趣的:(os,操作系统,计算机基础)