自学自用 = B站(操作系统_清华大学(向勇、陈渝)) 未完待续。。

https://www.bilibili.com/video/av6538245

介绍

本篇博客,旨在记录视频学习的要点,所以格式随意, 方便本人日后自考和回忆,有兴趣的朋友可以评论讨论。

原文地址https://www.cnblogs.com/clockq/p/10318639.html

一、操作系统(OS)描述 1.1 什么是操作系统

OS = Kernel + Shell,是介于底层硬件和应用软件之间的一层软件架构。

Shell 主要提供与Users的交互工作(Windows的GUI和Linux的Terminal)

Kernel 主要负责管理计算机的硬件资源

CPU调度器

内存管理 = 物理内存 + 虚拟内存

文件系统管理

中断和设备驱动

Kernel 特征

并发(也并行)

共享

虚拟化(cpu,内存 => 进程, 硬盘 => 文件)

异步

1.2 操作系统的发展历史

纸带+人工操作系统

多道操作系统

分时操作系统(1/1000 s一次分时)

单用户操作系统

分布式操作系统

计算机的快速发展与各个底层硬件的快速发展是分不开的(CPU的计算能力,IO的读写能力和网络带宽)

二、OS的启动、中断、异常和系统调用 2.1 计算机系统启动流程

BIOS = Basic Input/Output System

graph LR A[BIOS]-->B[Bootloader] B --> C[OS] 2.1.1 BIOS启动流程

POST = Power-On Self-Test

graph LR A[POST]-->B[启动顺序] B-->C[主引导记录] 2.1.2 主引导记录

主引导记录(MBR)= Master Boot Record

graph LR A[MBR]-->B[分区表] B-->C[活动分区] 2.1.3 硬盘启动

硬盘启动分为三种情况:

卷引导记录(Win)

扩展分区和逻辑分区(不常见)

启动管理器(Linux的Grub)

卷引导记录(VBR)= Volume boot record

graph LR A[活动分区]-->B[VBR] B-->C[OS]

启动管理器模式:

graph LR A[MBR]-->B[Grub] 2.1.4 操作系统启动 graph LR A[Load /boot/kernel]-->B[run /sbin/init] 2.2 中断、异常、系统调用

中断:不同硬件设备的计时器或网络中断(外设发起)(异步)

异常:非法指令或其他失败的处理状态(应用程序发起)(同步)

系统调用:应用程序主动向操作系统发出的服务请求(应用程序发起)(同步或异步)

2.2.1 中断处理流程 graph LR A[外设设置中断标记] --> B[保存现场] B --> C[中断程序处理] C --> D[清除中断标记] D --> E[恢复现场] 2.2.2 异常处理流程 graph LR A[保存现场] --> B[异常处理] B --> C[杀死异常程序] B --> D[重启发生异常的程序] C --> E[恢复现场] D --> E[恢复现场] 2.2.3 系统调用处理流程

应用程序无法直接操作硬件,需要OS提供的服务接口来间接调用,例:
C语言的printf()函数,执行时会调用OS的write()接口

三、内存管理 3.1 计算机体系结构

计算机基本硬件结构 = CPU + 内存 + 外设

CPU = 运算器 + 寄存器 + 控制器 + Cache(L1 + L2)+ 存储管理单元(MMU)

3.2 内存分层体系

越是靠近CPU的内存,读取速度越快,由近及远依次是:
CPU寄存器 => Cache => 主存 => 虚拟内存

操作系统在内存管理上要完成的任务:

抽象

逻辑地址空间 != 实际地址空间

保护(隔离)

同时运行多个应用,每个应用有一片独立的地址空间

共享

进程间可以使用共享内存进行交互和数据的传递

虚拟

内存不足可以利用硬盘获得更多的地址空间

3.3 地址空间和地址生成

逻辑地址空间:一个运行程序所拥有的内存范围。该地址是相对于当前进程数据段的地址,不和绝对物理地址相干。一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量]。

线性地址:是逻辑地址到物理地址变换之间的中间层。

物理地址空间:硬件支持的地址空间。

逻辑地址------(段机制)------->线性地址------(页机制)------->物理地址。

既然逻辑地址最终要转换为物理地址,那么为何还需要逻辑地址呢?

逻辑地址提供了权限检查功能:比如我们设置逻辑地址和物理地址之间的映射关系时,可以设置某块地址是只读的,只写的,只有CPU处于管理模式时才能访问等。这些功能可以让系统的内核,用户程序的运行空间相互独立:用户程序即使出错,也无法破坏内核;用户程序A崩溃了,也无法影响到用户程序B。

3.3.1 逻辑地址生成过程 graph LR A[C程序.c] --> |编译| B[编译程序.s] B --> |汇编| C[汇编程序.o] C --> |链接| D[执行程序.exe] D --> |加载| E[应有载入内存]

各个步骤的作用:

编译:C程序代码中,每个指针(变量名、函数名)就代表着一个逻辑地址,但该地址对硬件而言是不友好的,因此先经过编译,将代码转为语法树,通过符号来描述地址。

汇编:经过汇编,将上一步的语法树转为机器语言,使用一段相对连续的,从零开始的地址描述程序。更加接近底层硬件语言。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywswg.html