OS 第一章
第一章课后习题的概念梳理
笔记补全
上级具体实验操作见实验报告笔记。
第一章作业题
操作系统的主要功能:
- 管理系统的软硬件资源;
- 向用户提供一些服务和与计算机软硬件交互的接口。
内核态可以执行机器的所有指令,而用户态只能执行部分指令,比如连接到I/O设备是被禁止的。
这种区别重要的原因在于可以使用户更好的关心上层软件,利用操作系统提供的服务,忽略具体实施的细节,从而防止使某些具体的操作紊乱。
多道程序:是指多个程序对他们进行多道批处理,这些程序在宏观上是并行,微观上是串行的,这样可以更好的提高CPU的利用率,比如在等待缓慢的I/O时,可以让CPU进行计算。
假脱机:指在数据传输的过程中,把数据临时储存在某个存储区域,对数据进行缓冲。现代假脱机常见的应用是打印缓存,即计算机在打印时将打印任务加入到待打印的队列。
当每一个数据的读写即I/O都由CPU直接进行时,就不存在CPU等待其他I/O设备处理执行的时间,而多道程序技术却是在等待I/O处理时间时充分利用CPU以提高CPU利用。所以在此情况下,多道程序技术就不会发挥很好的作用。
个人计算机操作系统与大型主机操作系统的不同之处:
个人操作系统价格低,面对个人用户,功能支持一般仅仅需要满足个人用户的需求。大型主机操作系统面向用户群体,性能更倾斜于多个用户在主机操作系统上的分时、协同使用。此外运行大型主机操作系统的大型机往往也会用于储存商业数据库,这些应用要求操作系统提供服务的更高安全性和可用性。
块设备文件和字符设备文件的本质区别:块设备文件的访问可以是任意位置,字符设备文件要按照一定的顺序。
当用户2向用户1的文件建立连接以后,用户1将文件删除,用户2访问文件可能成功也可能不存在:
用户2对用户1的一个文件建立了一个链接,即在用户2的文件系统中,新增了一个i-node号映射到了用户1的这个文件,但实质上这个i-node号的数据结构对应的是用户1的这个文件的metadata,而不是用户1的这个文件的路径。所以当用户1删除这个文件时,如果用户1将这个文件,即这个存放用户数据的基本单位意义上的文件删除时(即从存储设备上),用户1访问文件不存在,而如果用户1只是删除了他文件系统下的映射时,访问文件仍然是成功的。
管道:管道不是一种必备的工具,管道也只是实现了进程与进程之间的通讯之一。但是管道始终高效方便的数据在进程间流动的通讯机制。
客户-服务器模型:可以用于单机系统,这种模型只是提供了服务器和客户机的区分,如minix操作系统中,也是按照这种模型,把功能模块化,维护服务器进程和客户进程。只是分布式系统这种模型更合适而已。
第一章笔记补全
虚拟化
- 虚拟化与云计算
- 管理os的os,即os管理客户os,客户os管理进程。
- 虚拟化的分类。
进程
- 动态实例与静态实例
- 宏观并微观串 c.f. concurrency v.s.parallel
- parallel是同时(有时间交叉)
内存
为什么说32位内存是4G内存大小呢,用$2^32$算嘛。
异步性
说白了,异步性就是不确定性。
硬件
涉及到硬件就是操作系统来管的,所以CPU是硬件,磁盘是硬件
而kenerl是操作系统的核心,也是一个抽象的概念,在发行版中,kernel和shell是在一起的,但是shell不是操作系统的一部分,可以将shell理解成命令行解释器,也可以理解成communicate的介质和工具。
创建子进程
创建子进程时,往往让子进程和父进程做不同的事情。
做相同的事为啥还要创建呢?
程序load
当程序从磁盘加载到内存时会发生什么?分配一块连续的物理内存
内存栈
使用栈的数据结构来传参数【函数调用时】还有一些局部变量
不断做函数调用时,此时栈加深,做向下生长,不断malloc是向上生长。
系统调用
目录管理
mkdir/chdir/mount/link
目录
特殊的一种文件,维护其下的文件名与i-node号的映射
link
同一文件名,不同路径名(共同操作同一文件)
通过操作i-nodo号,一个i-node号映射到不同的“路径名”,但其实存储的是一个文件。
文件
用户可见的保存数据的组织方式或是基本单位。
类Unix系统中:标记文件使用i-node号
i-node数据结构
I-node保存其对应文件的meta-data;
文件则用来保存用户的数据
路径名
文件名
mount
可以将两个文件系统合并成一个,比如将U盘挂到根文件系统下。
安全管理
9+2位permission bits,详见Missing-L1
时间管理
获取时间
作用,统计/分析程序执行时间,常用于优化时使用。
毕竟操作系统对性能很敏感的嘛。
组织结构
整体式结构
定义
整个操作系统是一堆过程的集合;每个过程都可以任意调用其他工程;kernel就是一堆可以互相调用的函数。
CPU的状态
用户态:一些I/O操作是没有权限执行的
核心态:
为什么要有系统调用:
有些操作用户态并没有权限执行,这个时候就需要切换到核心态,让系统调用来帮我们做。
系统调用的实现过程
“Trap to kernel”
sum up
这种宏内核的结构对于层次化不是很好,但如果硬分的话可以分成3部分,即1. 被请求服务例程的主例程(main procedure as the root of the layer tree);2. 执行系统调用的服务例程3. 支持服务例程的实用历程(utility procedure)
分层式结构(微内核结构)
把操作系统分成若干分别完成一组特定功能的服务例程,即把kernel space只让他完成基本功能的基本实现。
即把功能模块化。
应用LPC:进程间请求-应答式传递机制
cache的是一种缓存的概念,而不是一种特定的谁是谁的缓存
cache在计算机中是很常见的。
经典Unix结构
HAL:不是所有开源系统都是开源的!
为了避免某些开源协议,安卓系统有一个很巧妙的硬件抽象层。