Log[操作系统笔记_PART1]_20.05.20

第一章 引论
导图:
在这里插入图片描述
1.1 什么是操作系统
操作系统本质上是一个软件,运行在机器的内核态,装载在裸机上,拥有对所有硬件的完全访问权,为所有其他软件提供了一个基础的运行环境(把硬件的接口抽象成比较容易使用的接口,使得应用软件访问硬件变得容易一些)。
在所有情况下,操作系统的代码都是直接在硬件上执行的,不用解释器,也不是即时编译。
从另一种角度来看,操作系统用来管理一个复杂系统的各个部分。计算机包括了诸如CPU、存储器、磁盘等多种硬件设备,那么众多应用程序如何有秩序地访问他们呢?这就要由操作系统来完成了。所以从这个角度看,操作系统的任务主要有二:1.在相互竞争的程序之间有序地控制程序对硬件的访问(eg:三个程序同时往打印机输出东西,为了避免内容混合,将各个程序的打印结果放在磁盘的缓冲区,等此程序结束统一输出)2.对什么程序在使用什么资源进行记录,对资源请求进行分配(资源管理的两种方法:时间上复用:不同程序或用户轮流使用资源&空间上复用:每个客户都得到资源的一部分,比如内存里可以同时有好几道程序)
1.2 操作系统发展史
在这里插入图片描述
1.3 计算机硬件简介
1.3.1 处理器
工作流程:从内存中取出(机器)指令——>解码确定类型和操作数——>执行
CPU内还有寄存器,用来保存关键变量和临时数据,以来节省从内存调取数据的时间。
多数计算机还有专用寄存器:之一是程序计数器,保存了将要取出的下一条指令的内存地址
之二是堆栈指针:指向内存中当前栈的顶端,栈中有每个执行过程的栈帧,每个栈帧中都有这个过程的有关参数、局部变量以及临时变量
之三是程序状态字,主要存储CPU优先级、模式(用户or内核)
CPU的读取与处理早先使用的是流水线模式,每个单元各司其职,互不干扰。后来出现了超标量CPU,在解码单元与执行单元之间新增了保持缓冲区,扩展了多个执行单元。
CPU在内核态运行时,可以使用全部指令集和硬件中的每个功能;在用户态运行时就有所限制(不能I/O等),为了实现这些功能,就要使用系统调用(见1.5),以陷入内核态调用操作系统(使用TRAP指令)。
1.3.2 存储器
存储器层次结构:
在这里插入图片描述
主存被分成高速缓存行,最常用的行放置在CPU内部或非常接近CPU的高速缓存中。程序读取的字如果能在高速缓存中找到,则称为高速缓存命中;如若未命中则访问内存。
CPU中的缓存分为两级:L1缓存:在CPU核中,用来将已解码的指令调入CPU的执行引擎,无延时
L2缓存:用来存放最近使用的若干兆字节的内存字
缓存的作用主要是提高系统性能,比如把常用网站的IP放入缓存,提升响应速度。
主存(RAM 随机访问存储器),不能在高速缓存中得到满足的访问请求都会转往主存。
只读存储器(ROM 非易失性随机访问存储器),断电后数据不丢失
1.3.3 磁盘
是一种机械装置,访问速度极慢。
扇区(512字节)——>磁道——>磁盘。
虚拟内存机制:https://zhuanlan.zhihu.com/p/96098896
1.3.4 I/O设备
I/O设备一般包括两个部分:设备控制器和设备本身
设备控制器从操作系统读取命令,物理地控制设备。每一类设备控制器都是不同地,需要不同的软件来控制,这类软件称为设备驱动程序,对设备控制器发出指令并接收响应。
1.3.5 总线
计算机各种功能部件之间传送信息的公共通信干线,总线有高速缓存、内存、PCIe等多种,每条总线的传输速度和功能都不同。
1.4 操作系统基本概念
1.4.1 进程
进程本质上是正在执行的一个个程序。每个进程都有其独占的地址空间,进程在这个地址空间中进行读写。地址空间的内容包括可执行程序、程序的数据以及程序的堆栈。每个进程有一个UID,子进程与父进程有相同的UID.
与进程有关的信息,除了该进程自身地址空间的内容外,均放在操作系统的一张表中(比如前面说说到的两个寄存器就放在表中),称为进程表(数组或链表)
1.4.2 地址空间
通常情况下进程所拥有的地址空间小于主存,使得内存中有足够的地址容纳该进程。如果进程地址空间大于主存,就要使用虚拟内存技术。
1.4.3 文件
操作系统隐藏磁盘和其他I/O特性,为程序员提供一个抽象文件模型。创建文件、删除文件、读写文件都需要系统调用。
在操作系统给出的文件模型中,文件是分层次的,从根目录到子目录到具体文件,由此形成一个文件树,在UNIX中外设的文件也可以链接到文件树中。
1.5 系统调用(操作系统是怎样根据命令进行函数调用的)
假设一个进程正在运行,其中有一条指令需要系统服务,那它就需要执行一个陷阱或系统调用指令,将控制转移到操作系统,操作系统执行完系统调用后,将控制返回给之后的指令。
系统调用的流程大概是:压入参数——>调用指定方法——>陷入内核态——>在指定地址完成系统调用——>返回到调用者
1.5.1 用于进程管理的系统调用
fork()用于创建与父进程相同的子进程。函数返回值在子进程中显示为0,在父进程中等于子进程的进程标识符
1.5.2 用于目录管理的系统调用
link()
eg:文件共享
有时候需要若干个成员共享一个共同的文件,每个人都在自己的目录中有该文件,但可能采用不同名称,任何成员所做的修改都对其他成员可见
调用示例:link("/usr/jim/memo",usr/ast/note");表示memo以note为名进入了ast中。
那么link内部是如何实现共享的呢。每个文件都有唯一编号(i-编号)用来标识文件,而目录就是一个包含着<i-编号,ASCII名称>对集合的文件。而link所做的,只是利用某个已有文件的i-编号,创建一个新的<i-编号,ASCII名称2>,编号不变,名称任意。
mount()
eg:usb文件装入
调用示例:mount("/dev/sdb0","/mnt",0);第一个参数是usb驱动器0的块特殊文件名称,第二个参数是要被安装在树中的位置。
1.5.3 其他系统调用
kill系统调用供用户进程发信号用,若一个进程准备好捕捉一个特定的信号,那么,在信号到来时,运行一个信号处理程序。如果该进程没有准备好,那么信号的到来会杀掉该进程。
chdir("/usr/ast/test") 切换当前工作目录,在cmd中输入cd /usr/ast/test 就会调用此函数
1.5.4 Windows中的系统调用
Windows有一套过程称为Win32应用编程接口,程序员用这套过程获得操作系统的服务
1.6操作系统结构
1.6.1 单体系统
结构体系:1)一个主程序,用来处理服务过程请求 2)需要一套服务过程,用来执行系统调用 3)需要一套实用过程,用来辅助服务过程
1.6.2 微内核
尽量减少内核态的功能。内核态的设计思想:将操作系统划分为小的独立的模块,只有其中一个模块——微内核运行在内核态,其余模块作为普通用户进程。由于进程之间相互分离,所以一个模块的错误不会影响到其他模块,这是微内核结构相比于单体结构最大的优点。
1.6.3 C/S模式
将进程划分为两类:服务器(提供服务)和客户端(使用服务)。一台PC向某个服务器请求Web页面,然后该服务器回送该页面。
1.6.4 虚拟机(克隆真实机器)
最早的是VM/370系统,这个系统的核心时虚拟就监控程序,在裸机上运行并向上层提供了多台虚拟机,每台虚拟机都与裸机相同,所以在每台虚拟机上都可以运行一台裸机所能运行的任何系统。执行系统调用时,陷入到的是虚拟机的操作系统中。
这是第一类虚拟机管理程序,而第二类虚拟机管理程序有一个宿主操作系统,客户操作系统安装在一个虚拟机盘上,该盘只是宿主操作系统的文件系统中的一个大文件。
1.6.5 外核
对机器进行分区,每个用户都只得到资源的一部分。内核态有一个程序称为外核,这个程序的任务是为虚拟机分配资源,并确保各虚拟机对资源的使用独立,互不干扰。这样就免去了映像层,每个虚拟机真实拥有一部分只属于自己的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值