写在前面:
本文为本人整理归纳的西电卢本伟的博客和李航、高海昌复习课画的重点,把西电卢本伟的博客内容粘过来了,根据我的理解改了一些内容(考试前对着背就好
其中写的书页是os的中文黑皮书上的
考前最好把李航平时布置的作业都写一遍,把答案都背下来(这byd今年出的题全是自己班上的作业,巨恶心)
第一章 引论(Overview)
一. 什么是操作系统?
1.os是什么?
答:是运行在内核态的软件(Software that runs in kernel mode),是源管理器(Source manager),扩展机器(extended machine),是用户与系统硬件的接口。
2.os的结构特征?
答:层次结构(Layered)、虚拟机器(virtual machine)、庞大而单一的(monolithic)。
3.什么是系统调用(system call)?
答:为了从操作系统获取服务,用户程序必须进行系统调用,该调用进入内核并调 用操作系统。TRAP指令从用户模式切换到内核模式,启动操作系统。当工作完成后,根据系统调 用之后的指令将控制返回给用户程序。
呃呃这个好像今年也考了一个概念题,背就行了。
操作系统结构
单体系统,分层,微内核,宏内核,模块化
第一类虚拟机:直接运行在硬件上,每个虚拟机地位平等
第二类虚拟机:运行在其他的操作系统上,vmware
现代操作系统的特点
微内核Microkernel architecture
多线程
对称多处理Symmetric multiprocessing
分布式系统Distributed operating systems
面向对象
第二章 进程与线程(Process & Thread)
一. 什么是进程
1.什么是进程?
答:正在运行的程序的实例。
进程:
An executing program, including the current values of the program counter(程序计数器), register, and variables
进程包括:
数据段,代码段,堆栈段
program counter 程序计数器
stack 栈
data section 数据部分
2.进程与程序的本质区别?
答:进程是动态的而程序是静态的(进程是程序的一次执行);进程是暂时的,程序是永久的;进程和程序的组成不同。
- fork()和exec()的区别
简答/编程
exec函数族可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完后,原调用进程的内容除了进程号外,其它全部被新程序的内容替换了。上述的 ”os exam“ 的打印次数肯定就是一次了。子进程打印一次,父进程会执行execl( )函数,之后的打印语句不再执行。
4.什么是shell?
答:命令解释器。
shell是用户和Linux内核之间的接口程序。每个命令都由shell先解释然后传给Linux内核。
shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。
5.进程创建的四种状态(four events for process creation)
系统初始化
正在运行的进程执行了一个创建进程的系统调用
用户请求创建一个新进程
一个批处理作业的初始化
创建进程的操作:(选择题Eg.下列哪一个不会创建)
System initialization (系统初始化)
Execution of a process creation system (系统调用)
User request to create a new process(用户命令)
Initiation of a batch job(批处理作业的初始化)
6.进程终止的四种状态(four events for process creation)
正常退出(自愿的)
出错退出(自愿的)
严重错误(非自愿的)
被其他进程杀死 (非自愿的)
进程终止:(选择题)
Normal exit (voluntary)
Error exit (voluntary) (错误退出)
用户输入参数错误,要编译的文件不存在(gcc 1.c)
Fatal error (involuntary) (严重错误)
非法指令、除数是0、内存不存在
Killed by another process (involuntary)
Kill系统调用
7.什么是PCB?
答:PCB(process control block)进程控制块。包含寄存器,程序寄存器,程序状态字psw,堆栈指针,堆栈状态,进程ID。每一个进程都对应一个PCB,是进程存在的唯一标志。
PCB/进程表
包括程序计数器、堆栈指针、内存分配情况、所打开文件的状态、账号和调度信息
里面的东西有什么用
8.进程的五种状态:创建(new)、就绪(ready)、运行(run)、阻塞(block)、终止(terminated)
二. 什么是线程
1.什么是线程?线程与进程的区别?
答:线程是轻量级进程。二者区别:线程有自己的程序计数器,寄存器,堆栈,状态。可以共享进程的地址空间,全局变量,打开文件等。进程是资源的管理者,线程是进程中运行的实体,是cpu的调用者。
为何引入线程
线程和进程的区别
进程是资源分配和调度的基本单位,线程是程序执行和调度的基本单位
进程有独立的代码和数据空间,线程共享所属进程的资源,但有自己的栈和程序计数器
进程的创建和销毁开销大,线程的创建和销毁开销小
进程之间可以实现操作系统的并发,线程之间可以实现进程内部的并发
线程包括:
程序计数器、寄存器、堆栈
线程共享:
进程的地址空间、全局变量、代码段、数据段
这题今年作为简答题出现。
2.什么是用户级线程,什么是内核级线程,其各自的优缺点是什么?
答:① 用户级线程 User Level Thread(多对一):线程表在用户空间,进程表在内核空间。内核不知道线程的存在。
优点:线程的切换不需要陷入内核,进行上下文切换;允许进程有自己的调度算法
缺点:线程阻塞时会导致进程的阻塞,且一次只有一个线程能访问cpu,即使有多个cpu也无法实现多线程。
② 内核级线程 Kernel Level Thread(一对一):线程表和进程表都在内核空间。
优点:线程阻塞时可以检查是否有其他可运行的线程,并发度高(不止当前进程,也有可能其他进程)
缺点:线程切换开销很大,用户到核心
多对多
既克服了多对一并发度不高,又克服了一对一用户进程占用太多内核进程导致开销过大
Posix thread p60
Pop up thread p64
中断
硬件压入堆栈程序计数器等
硬件从中断向量装入新的程序计数器
汇编语言过程保存寄存器值
汇编语言过程设置新的堆栈
c中断服务运行
调度程序决定下一个运行的进程
c过程返回至汇编代码
汇编语言过程开始运行新的当前进程
三. 进程间通信
这边的概念以及程序都十分重要,集中在70-83页,理解并会写代码,很可能考代码补全,虽然22年没考…其中peterson算法,TSL避免死锁,信号量解决生产者消费者(有一年考了利用线程解决生产者消费者问题,书上93页有代码,其实和其他方法大差不差,但是其中有的函数名称不看的话可能不知道)都是很重要的。
Sleep 引起调用进程阻塞的系统调用
Wake up 唤醒进程的系统调用
改造+填空:
Various proposals for achieving mutual exclusion
Disable Interrupts 禁止中断.
Lock Variables 锁变量.
Strict Alternation 严格轮换法.
Peterson’s Solution Peterson解法.
The TSL Instruction TSL指令.
Busy waiting:
单表志、TSL、Swap、Peterson、XCHG、严格轮换
Peterson不会考
Tsl/xchg 很有可能
理解strict alternation,与其他busy waiting的区别
Sleep wake up的缺陷 p73
Semaphore和mutex的区别
经常考
Pthread 经常考 p77
哲学家看看,不太重要
读者写者很重要
- 竞争条件 Race condition:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。
- 互斥 mutual exclusion:以某种手段确保,当一个进程在使用共享变量或文件时,其他进程不能进行同样操作。
避免竞争条件的方法
实现互斥的条件:mutual exclusion (选择题)
No two processes simultaneously in critical region(临界区域内不同时存在两个进程)
避免了数据竞争和不确定性现象的发生
没有对CPU的速度或数量做任何假设(No assumptions made about speeds or numbers of CPUs)
表明实现互斥的解决方案不依赖于处理器的速度或数量,在不同的硬件环境下都能有效工作
任何在临界区域外运行的进程都不能阻塞另一个进程(No process running outside its critical region may block another process)
避免了死锁的发生,保证系统的正常运行
No process must wait forever to enter its critical region(没有进程应该永远等待进入临界区域)
避免了进程由于无法获取资源而永久地阻塞在等待状态
3.四种解决竞争条件的方案 four conditions to hold to have a good solution for race condition
任何两个进程不能同时处于临界区
不应对CPU的速度和数量作出假设
临界区外运行的进程不能阻塞其他进程
不能使进程无期限等待进入临界区
4.临界区 critical region:对共享内存进行访问的程序片段称为临界区。
5.自旋锁 spin lock:用于忙等待,也叫忙等锁(busy-waiting lock)
6.自旋锁和信号量的区别?信号量和互斥量的区别?
答:自旋锁是自选等待,用于忙等待,对系统负载大,浪费cpu时间,效率较高,是关抢占的;信号量是睡眠等待,对系统消耗小,因为进行了进程间的切换效率较低,没有关抢占。信号量的值是0或者正数,而互斥量的值只能是0或者1;信号量一般是实现在内核态的,而互斥量是实现在用户态的。
7.管程:是一个由过程,变量,数据结构组成的一个集合。进程只能通过访问管程中的过程来访问过程中的数据结构。
四. 调度
进程调度算法,主要掌握FCFS、SJF、Round-Robin、Multiple Queue四种方法即可,考的比较少,近几年都没有考到。
Multiple Queue 参考2024王道习题 p80 t45
要注意会画调度的甘特图。
五. 经典IPC问题
老演员了,哲学家进餐和读者写者问题。书上的代码,理解会写。
第三章 内存管理(Memory Management)
也是一个重点章节,22级考的特别多…
一. 虚拟内存
1.static relocation & dynamic relocation
两种重定位的区别
重定位,通常来说把在装入时对目标程序中指令和数据地址修改的过程称为重定位。
静态重定位:在逻辑地址转换为物理地址的过程中,地址变换是在进程装入时一次完成的,以后不再改变。
优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。
缺点:内存空间不能移动;各个用户进程很难共享内存中同一程序的副本
动态重定位:装入时不转换,所有地址仍是逻辑地址,在逐条指令执行时,才完成地址转换。在装载时无需重定位。
优点:内存空间可以移动;各个用户进程可以共享内存中同一程序的副本。
缺点:增加了机器成本,而且实现存储管理的软件算法比较复杂。
基址寄存器和界限寄存器
Base register/limit register
程序的起始物理地址装载到基址寄存器中,程序的长度装载到界限寄存器中
CPU硬件会在把地址发送到内存总线前,自动把基址值加到进程发出的地址值上。同时,它检查程序提供的地址是否等于或大于界限寄存器里的值
位图bitmap和链表list 看一下
2.Paging:物理内存按照固定大小划分成若干单元,单元就是页框。
- MMU:memory management unit内存管理单元,虚拟地址被送到MMU,MMU将虚拟地址映射为物理地址
通常在cpu里面
MMU
Memory Management Unit
内存管理单元
将虚拟地址映射为物理地址
- Page Table:页表的目的就是将虚拟页面映射成页框。页表由页表项构成。实际内存的每个页框对应了一个表项,而不是每个虚拟页面对应一个表项。
页表项page table entry的结构,看看每一位干嘛的 p112
倒排页表看看 p116
Page size 会算 p127
5.TLB:Translation Looked aside buffer转换检测缓冲区,又叫快表。
计算机的一个小型硬件设备,将虚拟地址直接映射到物理地址,不需要再访问页表,通常在MMU中,包含少量的表项。当虚拟地址放入MMU中时,首先通过硬件在TLB中将虚拟页号与TLB中所有表项进行同时匹配,如果有效匹配,则取出页框号,不用访问页表。如果虚拟页号不在TLB中,MMU就会进行正常的页表查找,并且替换TLB 的表项。
二. 页面置换算法
没啥好说的,OPT、FIFO、LRU都要掌握,这三种今年都考了,问你缺页次数。看个例题吧:
三. 内存动态分区分配
也没啥好说的,首次适应、最好适应、最坏适应、领近适应,今年考了。这是原题:
四. 系统设计问题
可把我坑惨了,我没细看,结果考了两题。
1.DLL:shared library,dynamic linked libraries
共享库又称动态链接库,当一个程序和一个共享库链接时,连接器并没有加载所有的函数,有的函数只是加载了一段能在运行时绑定被调用函数的存根历程。当一个共享库被装载和使用时,整个库并不是一次性并装入内存。而是根据需要,以页面为单位装载的,没有被调用的函数是不会被装入内存的。(这个考了)
共享库的地址问题 p129
共享库和静态库的区别
2.Memory-mapped files
进程通过一个系统调用(mmap),将一个文件映射到进程虚拟地址空间的一部分。对文件的读写,就像内存中的字符数组,而不用通过读写来访问文件。访问该页面时才会读入,一开始不会把文件的内容全部读入(这个考了)
虚拟内存接口 p130
分段和分页的区别
涉及分页的情况:
进程创建
Eg创建页表
进程执行
Eg mmu重新设置、tlb更新
page fault 缺页异常
Eg看哪个地址导致缺页,把不要的页换走
进程终止
Eg释放页表、页
缺页异常的处理方法:
硬件陷入内核,在堆栈中保存程序计数器
保存通用寄存器
操作系统决定需要哪个虚拟页面
检查地址是否有效,寻找空闲的页框,没有则通过置换算法淘汰一个
如果选择的页框是脏的,则写回磁盘
操作系统将页面装入
更新页表
恢复至发生缺页之前的状态,程序计数器重新指向该指令
调度引发缺页中断的进程
恢复进程的寄存器和其他信息,继续执行
缺页中断和一般中断的区别
P132
第四章 文件系统(File System)
可能考文件结构p150、149
魔数
当一个文件的扩展名被修改过,识别一个文件的类型就用到了我们提到的“魔数”。很多类型的文件,其起始的几个字节的内容是固定的,这几个字节的内容也被称为魔数,因为根据这几个字节的内容就可以确定文件类型。
MBR是什么
MBR Master Boot Record 主引导记录
记录了启动引导程序和磁盘的分区表信息
启动引导程序最主要的作用就是加载操作系统的内核
分区表给出每个分区的起始和结束地址
MBR最开始确定活动分区,读入第一个块即引导块,每个分区都从一个引导块开始
一. 文件系统的实现
1.hard link & soft link
硬链接:两个文件目录指向一个inode;磁盘块不列入目录,列入目录的是i节点
软连接:符号链接,创建一个链接文件link,文件内容为要共享的文件的路径,把该文件放在B的目录下,只有真正的文件拥有者才拥有者真正的Inode。
硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
软链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
2.FAT作用
FAT表:取出每个磁盘块的指针字,放到内存的一个表中。
作用:整个块都可以存放数据(不用第一个字放指针),随机访问也变容易了)。只要目录项中记录一个整数,按照它可以找到文件的所有块。
FAT表:File Allocation Table 文件分配表
取出每个磁盘块的指针字,放到内存的一个表中。
作用:整个块都可以存放数据(不用第一个字放指针,每个块储存数据的字节数仍然是2的整数次幂,而存放指针后就不是),随机访问也变容易了)。只要目录项中记录一个整数,按照它可以找到文件的所有块
缺点:整个表都得在内存中,占用内存太大
i节点相较于FAT的优势
3.inode:最后一个记录了各个文件分别包含哪些磁盘块的方式是给每个文件赋予一个称为 i 节点的数据结构,其中列出了文件属性和文件块的磁盘地址。给定 i 节点,就能找到文件的所有块。
- inode相较于FAT的优势:只有在文件打开时,i 节点才在内存中,为了打开文件而保留 i 节点的数组所占据的空间比FAT表要小得多。(今年考了)
二. 杂项
1.LFS Log-structured File System日志结构文件系统:把磁盘当成一个大的循环使用的Log,每次都是从当前位置连续向后写,写到末尾,再返回从头 开始向后写,这样就可大大降低寻道时间。所有的写操作最初都被缓冲在内存中,然后周期性的把已缓冲的写作为一个单独的段,在日志的末尾写入磁盘。要打开一个文件,则首先需要在i节点图中找到文件i节点。一旦文件定位后就可以找到相应的块的地址。
2.JFS Journaling File System:保存一个用于记录系统下一步要做什么的日志,当系统在完成他们前崩溃时,重启后可以产看日志来恢复崩溃前的任务。
- VFS:将多种的文件系统统一成一个有序的结构。抽象出所有文件系统的共有部分,并将这部分代码放在单独的一层,该层调用底层的实际文件系统来管理数据。
- 磁盘配额 p170
看看逻辑和物理转储
目录和文件的区别
目录也是文件,是一种特殊文件,叫目录文件,简称目录。
目录并不是真的把文件放在里面。目录是一个“特殊的文件”,它知道文件的存储位置(通过 inode)。这就说明了为什么它被称为目录。目录用来保存文件项目的索引,而不用保存文件项目本身。
文件就是目录文件以外的普通文件,简称文件。
文件:文件的 inode 存储了指向文件内容所在的数据块的指针,文件的内容就保存在这些数据块中。文件的 inode 还保存了文件的各种属性,如文件大小、创建时间、所有者等信息。
目录:目录的 inode 不是直接指向数据内容,而是指向一种特殊的数据结构,我们通常称之为目录项(Directory Entries)。每一个目录项包括两部分,一是文件名,二是指向该文件的 inode 的指针。所以,目录实际上是一个特殊的文件,它的内容是一种映射关系,即文件名到 inode 的映射。因此,目录可以包含其他文件或目录,这就构成了我们常见的文件系统的树状结构。
文件数目2^16
文件名多达14个字符
第五章 输入/输出(Input/Output)
Device controller
I/O由机械部件和电子部件组成,电子部件叫Device controller,经常出现在主板上的芯片,机械部件是IO设备本身
- Memory-Mapped I/O :内存映射IO,将所有控制器映射到内存空间中,每个控制器被分配唯一的一个内存地址,并且不会有内存被分配这个地址。这样的系统称为内存映射I/O。
- 优点:
可以用c编写,否则要用汇编代码
不需要特殊的保护机制来阻止用户I/O操作
可以引用内存的每一条指令也可以引用控制寄存器
缺点:
对设备控制寄存器进行高速缓存可能是灾难性的
如果只有一个地址空间,所有的内存模块和所有I/O都得检查内存引用,来决定谁响应
2.Programmed I/O &Interrupted-Driven I/O &DMA I/O difference
这一章讲的不深,最重要的也就这个知识点了,年年考
看看例子
1)Programmed I/O:CPU一直检查外设
Programmed I/O:CPU循环检查设备状态(轮询
例子: 一个简单的键盘输入程序,每次从键盘读取一个字符并将其存储在内存中的缓冲区,然后CPU通过轮询方式不断地检查缓冲区中是否有新的输入数据。
2)Interrupted-Driven I/O:允许CPU在等待外设的时候,做些其他的事情,使用中断机制,中断发生在每个字符上。
Interrupted-Driven I/O:允许CPU在等待外设的时候,做些其他的事情,使用中断机制,设备控制器通过中断主动向cpu报告I/O已完成,无需轮询,问题在于设备与内存进行数据交换仍要通过cpu,且是以字节为单位干预,用于块设备效率很低
例子:网卡接收到数据包时,会发送一个中断信号给CPU,CPU接收到中断信号后,会执行相应的中断处理程序来读取网络数据并进行后续处理
3)IO using DMA:每个缓冲区中断一次,CPU可以自由在IO期间做其他事情。数据传输由DMA在内存和I/O中完成。
传输单位是数据块
数据在设备和内存间传递,不经过cpu
只在数据块传输的开始和结束才打扰cpu
例子:当大量数据需要进行数据传输时,如硬盘读写操作,CPU可以将数据传输的任务交给DMA控制器处理,DMA控制器直接将数据从设备读取或写入内存,减少了CPU的参与,提高了数据传输效率。
DMA
Direct Memory Access 直接存储器存取
和内存互相传递数据,解放cpu
中断只在传输的开始和结束时打扰cpu
3.磁臂调度算法:FCFS、SSF、ELEVATOR。看个例题就理解了,22年没考
4.高级格式化和低级格式化的区别
Low level format
低级格式化就是和操作系统⽆关的格式化。
低级格式化是物理级的格式化,简单的说硬盘在制作的时候,划分磁柱⾯、建⽴扇区的过程就是低级初始化,这是一个从无到有的过程。所以大家刚买来的硬盘就是已经经过低级格式化的硬盘,不用自己做低级格式化了。
High level format
⾼级格式化就是和操作系统有关的格式化
⾼级格式化主要是对硬盘的各个分区进⾏磁道的格式化,在逻辑上划分磁道。高级格式化,又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。
比较:
1、⾼级格式化就是和操作系统有关的格式化,低级格式化就是和操作系统⽆关的格式化
2、低级格式化:为创建硬盘扇区(sector)使硬盘具备存储能力的操作。高级格式化:包括对主引导记录中分区表相应区域的重写、根据用户选定的文件系统在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间。
块设备和字符设备:
Block device/character device
块设备:把信息储存在固定大小的块中,每个块都能独立于其他快读写,硬盘
字符设备:以字符为单位发送/接受一个字符流,不可寻址,没有寻道操作,不考虑块结构,鼠标、打印机、网络接口
设备无关性:
计算机系统的输入输出设备种类、型号、规格繁多,所以必须屏蔽设备的物理特性,向用户提供一个统一、简便的使用接口
时钟的任务
Maintaining the time of day.
Preventing processes from running longer than they are allowed to.
对cpu使用进行记账 Accounting for CPU usage.
处理alarm系统调用 Handling the alarm system call made by user processes.
为系统的各个部分提供监视定时器 Providing watchdog timers for parts of the system itself.
完成概要剖析、监视和统计信息收集 Doing profiling, monitoring, and statistics gathering.
第六章 死锁(Deadlock)
1.Deadlock:如果一个进程集合中的每一个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么该进程集合就是死锁的。
2.四个死锁必要条件及解决方案
互斥条件Mutual exclusion condition:将临界资源改造为可共享使用的资源,如spooling技术
占有并等待Hold and wait condition:运行前分配好所有需要的资源,之后一直保持
不可抢占条件No preemption condition:申请的资源得不到满足时,立即释放拥有的所有资源;申请的资源被其他进程占用时,由操作系统协作剥夺
环路等待Circular wait condition:给资源编号,必须按照编号从小到大的顺序申请资源
3.safe state:没有死锁发生,即使每一个进程突然请求对资源的最大需求,也可能存在某种调度次序能够使每一个进程运行完毕。
4.Unsafe state:从安全状态出发,系统能保证所有的进程都能完成,从不安全状态出发,就没有这样的保证。
安全状态一定不会发生死锁。不安全状态也不代表当前状态就是死锁状态,当前状态也可能是非死锁,但继续向下运行,一定发生死锁。
5.银行家算法:你懂的,必考,也不难
6.两阶段锁two-phase lock:第一阶段进程对所有所需的记录进行加锁,一次锁住一个记录。第二阶段完成更新然后释放锁。如果第一阶段某个进程需要的记录已经被加锁,该进程释放它所有加锁的记录,然后重新开始第一阶段。
7.活锁live lock:两个进程都在运行,但都没有实质性的进展。当进程意识到它不能获得下一个锁,就会释放已经得到的锁,然后等待一段时间,再尝试一次。当几个进程同时这么做。这个过程没有进程阻塞,甚至可以说进程正在活动,然而进程并不会继续往下执行,称为活锁。
8.饿死:进程永远得不到执行。
知识点6、7、8可以忽略,基本不考…
第七章 多机系统(Multiprocessor System)
记住这张图就好…
A.多处理机系统share memory model
共享存储器多处理机
多个cpu通过一个共享存储器通信,每个cpu可访问整个物理存储器
B.消息传递多处理机message passing multi computer (tight-coupled)
许多cpu-存储器通过网络连接,每个存储器对应一个cpu,cpu通过互联网络发送多字节消息通信,B比A容易构建,但是编程较难
C. 广域分布式系统wide area distributed system (loose-coupled)
所有的计算机系统都通过广域互联网连接,B和C的区别是C采用完整的计算机,但是C消息传递时间长
消息传递时间:A<B<C
Remote Procedure Call RPC:远程过程调用
机器1的进程调用机器2的过程时,在机器1中的调用进程被挂起,在机器2中被调用的过程执行,可以在参数传递中传递从调用者到被调用者的信息,并且可在过程的处理结果中返回信息
A是uma
B和C是numa
第八章 安全(Security)
1.Security Goals & Threats
机密性 数据暴露
完整性 数据篡改
可用性 拒绝服务
2.非对称秘钥和对称秘钥的区别
看看例子
私钥加密/对称密钥加密:私钥加密
非对称密钥:公钥加密,私钥解密
身份验证必须识别:
Something the user knows
Something the user has
Something the user is
Domain:
域是(对象,权限)对的集合,每一对组合指定一个对象和一些可在其上运行的操作子集
最低权限原则:当每个域都拥有最少数量的对象和满足其完成工作所需的最低权限时,安全性达到最好
ACL Access control list:访问控制列表
包含所有可访问对象的域和这些域如何访问这些对象的方法
Capabilities:权能字
与每个进程关联的可访问的对象列表,和对每个对象的权限:权能字列表,其中每个单独的项目叫权能字
杂项
系统调用和函数调用的区别
库函数是语言和应用程序的一部分,好移植,运行在用户态;系统调用是操作系统的一部分,是内核为用户提供的程序接口,不好移植,运行在内核态,需要从用户态转向内核态,开销大,函数调用开销小。
中断类型:
Program (程序中断)
1)arithmetic overflow 运算溢出
2)division by zero
3)execute illegal instruction
4)reference outside user’s memory space
Timer (时钟)
I/O
Hardware failure
进程切换/上下文切换
挂起一个进程,将cpu上下文保存到pcb,包括程序计数器、其他寄存器
将进程pcb移入就绪/阻塞队列
选择一个进程,更新pcb
恢复新进程的pcb上下文
跳转到pcb的程序计数器指向的地方
中断和系统调用的区别
来源:
中断的来源是外部IO设备
系统调用是应用程序明确要求操作系统提供某个服务,比如打开文件,关闭文件,读写文件,发送网络包
触发时机与处理方式:
中断:应用程序无法知道外设何时发出了中断信号,操作系统在检测到中断信号后,会切换到中断程序去处理,完成后再切换回应用程序,这个过程对应用程序是透明的
系统调用:应用程序发起调用时,操作系统处理方式可能为同步可能为异步,比如应用程序请求读一块数据,可以在发出后等待数据就绪后才接着干其他事情,也可以在发出后就干其他事情,操作系统处理完成后发出就绪事件通知应用程序
文件空洞(file hole)
在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被设为 0。
系统调用与普通过程调用的相同点和不同点
相同点
(1)改变指令流程
(2)重复执行和共用
(3)改变指令流程后需要返回原处
不同点
(1)系统调用是动态调用,程序中不包含被调用代码,系统调用的调用地址和返回地址都不固定,而CALL调用是静态,被调用代码与调用代码在同一程序内,调用地址是固定的,返回地址不固定
(2)执行状态不同,系统调用涉及到内核态和用户态之间的切换,而普通的过程调用只在用户态下执行
(3)进入方式不同,用int或trap指令进行系统调用,用call或jmp指令进行普通的过程调用
(4)与进程调度的关系不同,采用抢先式调用的系统,在系统调用返回时,需要进行重新调度的检查,以判断是否有更高优先级的任务就绪
普通的过程调用通常是在用户程序内部执行的,不会涉及到操作系统的调度和任务切换。因此,在普通的过程调用中,不会存在系统调用返回时需要进行重新调度检查的情况。
(5)嵌套或递归调用,对系统调用,一般不允许在同一个进程内嵌套或递归
2^12
2^32/2^12=2^20
问题来了,为什么要用二级页表而不使用一级页表,或者说使用二级页表比一级页表的优势在哪里?
(1)使用多级页表可以使得页表在内存中离散存储。多级页表实际上是增加了索引,有了索引就可以定位到具体的项。举个例子:比如虚拟地址空间大小为4G,每个页大小依然为4K,如果使用一级页表的话,共有2^20个页表项,如果每一个页表项占4B,那么存放所有页表项需要4M,为了能够随机访问,那么就需要连续4M的内存空间来存放所有的页表项。随着虚拟地址空间的增大,存放页表所需要的连续空间也会增大,在操作系统内存紧张或者内存碎片较多时,这无疑会带来额外的开销。但是如果使用多级页表,我们可以使用一页来存放页目录项,页表项存放在内存中的其他位置,不用保证页目录项和页表项连续。
(2)使用多级页表可以节省页表内存。使用一级页表,需要连续的内存空间来存放所有的页表项。多级页表通过只为进程实际使用的那些虚拟地址内存区请求页表来减少内存使用量(出自《深入理解Linux内核》第三版51页)。举个例子:一个进程的虚拟地址空间是4GB,假如进程只使用4MB内存空间。对于一级页表,我们需要4M空间来存放这4GB虚拟地址空间对应的页表,然后可以找到进程真正使用的4M内存空间。也就是说,虽然进程实际上只使用了4MB的内存空间,但是为了访问它们我们需要为所有的虚拟地址空间建立页表。但是如果使用二级页表的话,一个页目录项可以定位4M内存空间,存放一个页目录项占4K,还需要一页用于存放进程使用的4M(4M=1024*4K,也就是用1024个页表项可以映射4M内存空间)内存空间对应的页表,总共需要4K(页表)+4K(页目录)=8K来存放进程使用的这4M内存空间对应页表和页目录项,这比使用一级页表节省了很多内存空间。当然,在这种情况下,使用多级页表确实是可以节省内存的。但是,我们需要注意另一种情况,如果进程的虚拟地址空间是4GB,而进程真正使用的内存也是4GB,如果是使用一级页表,则只需要4MB连续的内存空间存放页表,我们就可以寻址这4GB内存空间。而如果使用的是二级页表的话,我们需要4MB内存存放页表,还需要4KB内存来存放页目录项,此时多级页表反倒是多占用了内存空间。注意在大多数情况都是进程的4GB虚拟地址空间都是没有使用的,实际使用的都是小于4GB的,所以我们说多级页表可以节省页表内存。
标签:文件,调用,复习,内存,电软,线程,页表,进程,操作系统 From: https://blog.csdn.net/Yeyu_15/article/details/140251157