此笔记分为两部分,
上部分是B站操作系统考研课程的知识点总结,包括:概述、进程与线程、处理机调度算法、进程同步、内存管理、文件管理、IO管理,共7部分。
下部分是阅读《现代操作系统》这本书的知识点总结,包括:引论、进程与线程、存储管理、文件系统、IO、死锁、多媒体、多处理机、安全,共9部分。
一、操作系统的结构
1、五大组成:
计算机硬件系统由运算器、控制器、存储器、输入设备、输出设备组成
五大组成详解:
运算器:对二进制数码进行算术运算或逻辑运算,运算速度用百万次/每秒(MIPS)表示
控制器:计算机心脏;它由指令寄存器、指令译码器、程序计数器、操作控制器部件组成;指令执行过程:从指令寄存器取指令——交由指令译码器分析指令——分析出来的指令生成控制信号——最后交由操作控制器部件执行指令。运算器+控制器合称中央处理器(CPU),时钟主频(赫兹数)越高,速度越快
存储器:分内存(主存)和外存(辅存);内存速度快,断电后信息丢失;(重启慢,因为外存在往内存里写数据);外存速度慢,信息可长期保存;a) 内存能直接和CPU交流信息,分为:
随机存储器RAM:可读可写
只读存储器ROM:用户无法修改
Cache缓存:主要为了解决CPU和主存速度不匹配,为提高存储器速度而设计
外存:硬盘(读写物理单位是扇区);闪存(U盘);光盘(CD、DVD,蓝光光盘单面单层25G)
层次结构:Cache+主存  (解决速度不匹配);主存+辅存  (解决存储器系统容量)
  索引:索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
若文件太大,索引表项太多,可以采取以下三种方法解决:
1.链接方案:索引表太大,一个索引块装不下,可以将多个索引块链接起来存放。缺点,要找到i号索引,必须依次读入0~i-1号索引块,导致磁盘IO次数过多,效率低。
2.多层索引:上层索引块指向下层,若有k层,访问一块数据需要k+1次磁盘IO。缺点:小文件也得读多层。
3.混合索引:多种方式结合。一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。优点:对于小文件,访问一个数据块所需的磁盘IO次数少了。
输入设备
输出设备
缓冲区的作用:缓和CPU与I/O设备之间速度不匹配的矛盾;减少对CPU的中断频率,放宽对CPU中断相应时间的限制;解决数据粒度不匹配的问题(如输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符);提高CPU与I/O设备之间的并行性。
2、五大设备连接方式:
直线连接。
总线结构:
  1. 数据总线:传递数据
  2. 地址总线:传递地址
  3. 控制总线:发送命令
比如1+2=?总线怎么配合:控制器发出取1和2,地址总线传1和2的内存地址,通过地址找到了1和2,数据总线传1和2这两个数据给运算器。
3、操作系统的概念、功能、组成、分类
  1. 概念:
进程、线程、内核态和用户态
进程详细:
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。进程通信就是指进程之间的信息交换。为了保证安全,一个进程不能直接访问另一个进程的地址空间。
进程通信分为三类:
共享存储(设置一个共享空间,可以互斥地访问,要么基于数据结构,要么基于存储区的共享);
管道通信(设置一个特殊的共享文件(管道),其实就是一个缓冲区,一个管道只能实现半双工通信,实现双向同时通信要建立两个管道,各进程要互斥访问管道,写满时,不能再写。读空时,不能再读,没写满,不能读,没读空,不能写);
消息传递(传递结构化的消息(消息头/消息体))
线程的属性:线程是处理机调度的单位,多CPU计算机中,各个线程可占用不同的CPU,线程几乎不拥有系统资源,同一进程的不同线程间共享进程的资源,由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预。
重点:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
中断:
中断发生时,cpu立即进入核心态;
中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
对于不同的中断信号,会进行不同的处理。
发生了中断, 就意味着需要操作系统介入,开展管理工作,由于操作系统管理工作(比如进程切换、分配IO设备等)需要使用特权指令,因此cpu要从用户态转为核心态。中断可以使cpu从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
进程与线程的比较:
调度:在引入线程的操作系统中,进程仅作为拥有资源的基本单位,而线程是系统调度、分派的基本单位。
并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,线程之间也可以。
拥有资源:在引入线程的操作系统中,进程是拥有资源的一个独立单位,线程仅拥有少量能保证其正常运行所必须的资源。
系统开销:由于进程相对较重,因此,操作系统进程调度的开销大大高于线程调度的开销。
死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象
饥饿:由于长时间得不到想要的资源,某进程无法向前推进的现象。比如在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程饥饿。
预防死锁:破坏互斥条件(将临界资源改造为可共享使用的资源);破坏不剥夺条件(申请的资源得不到满足时,立即释放拥有的所有资源;申请的资源被其他进程占用时,由操作系统协助剥夺(考虑优先级));破坏请求和保持条件(运行前分配好所有需要的资源,之后一直保持);破坏循环等待条件(给资源编号,必须按编号从小到大的顺序申请资源)
终端
  1. 功能:
  1. 控制计算机上运行的程序
  2. 管理计算机资源
  1. 组成
  1. 进程管理:系统资源的分配单位
  1. 存储管理:内存分配,存储保护,虚拟存储
  2. 设备管理:管理外设和接口
  3. 文件管理:保存程序和数据等软件信息
  4. 程序接口:提供指令或函数的调用方式,使程序能够调用系统的服务
  5. 用户界面:为用户提供操作环境
  1. 分类
  1. 单用户操作系统:DOS,Windows系列
  2. 批处理操作系统:DOS/VSE(IBM)
  3. 分时操作系统:UNIX(CPU时间分片)
  4. 实时操作系统:卫星导航等用的
  5. 网络操作系统:一般的操作系统都是网络操作系统
以上是B站操作系统考研课程的知识点总结,以下是阅读《现代操作系统》这本书的知识点总结
一  引论
用户态: web浏览器、电子邮件的阅读器、音乐的播放器 软件
用户接口程序
内核态: 操作系统
硬件
用户与计算机交互的程序,基于文本的通常称为shell,而基于图标的则称为图形用户界面(Graphical User Interface GUI)。
操作系统的任务是创建好的抽象,并实现和管理它所创建的抽象对象。
操作系统的资源管理通过两种方式实现共享:时间上复用(如CPU的时间片轮转)、空间上复用(内存)
程序状态字(Program Status Word, PSW)寄存器:这个寄存器包含条件码位、CPU优先级、模式(用户态和内核态)、以及各种其他控制位。用户程序通常读入整个PSW。在系统调用和I/O中,PSW的作用很重要。
(一)操作系统外部
  1. 启动计算机:
主板上有个叫做 基本输入输出系统(Basic Input Output System, BIOS)的程序。
计算机启动时,BIOS开始运行,它会检查机器设备、扫描和总线连接的所有设备,并将这些设备记录下来。然后BIOS通过尝试存储在CMOS存储器中的设备清单决定启动设备。用户可以在系统刚启动时进入BIOS配置程序,对设备清单进行修改,比如选择系统从U盘启动或CD-ROM启动,如果没有这些设备,系统会默认从硬盘启动。
这时,操作系统询问BIOS,以获得配置信息,看看缺哪些设备,就提示插入含有这个设备的CD-ROM,如果所有设备齐了,操作系统就将它们调入内核,然后初始化有关表格,创建需要的背景进程,并在终端上启动登录程序或GUI。
  1. 操作系统分类:
大型机操作系统:它与个人计算机主要差别是其I/O处理能力。它主要提供三类服务:批处理(不需要交互式用户干预的周期性作业)、事务处理(每秒处理大量业务)、分时处理(允许多个远程用户同时在计算机上运行作业)。它逐渐被诸如Linux这类UNIX的变体所替代。
服务器操作系统、个人计算机操作系统、嵌入式操作系统(电视、手机)、传感器节点操作系统(如气象测量,此类知名系统是TinyOS)
  1. 进程
是容纳运行一个程序所需要所有信息的容器。本质上是一个正在执行的程序。它有地址空间——从最小存储位置到最大存储位置的列表。地址空间里放有可执行程序、程序的数据及堆栈。
  1. 文件
进程和文件层次都可以组织成树状结构,但进程的很少超过三层,文件的却有很多层。
最开始的正斜线(/)表示这是从根目录开始的绝对路径。MS-DOS和Windows中用反斜线(\)。
在读写文件前,先打开文件,检查其访问权限。若权限许可,系统将返回一个小整数,称作文件描述符(file descriptor),供后续操作使用。若禁止访问,系统返回一个错误码。
特殊文件:它是为了使I/O设备看起来像文件一般。它分为块特殊文件(指由可随机存取的块组成的设备,如磁盘)和字符特殊文件(打印机、调制解调器等接收或输出的字符流的设备)。
  1. Shell
它是操作系统与终端客户之间的界面,它不是操作系统的组成部分,只是个命令解释器。它有很多种类,如sh、csh、bash等
  1. 系统调用
CPU执行一条指令时,需要一个系统服务,如从一个文件读数据,那它会执行一个系统调用指令,将控制转移到操作系统,操作系统紧接着通过参数检查,找出所需的调用过程。然后,它执行系统调用,并把控制返回给在系统调用后面跟随着的指令。
比如系统调用命令read,它有三个参数:依次为参数指定文件,指向缓冲区,说明要读出的字节数。    Count = read(fd,buffer,nbytes);
  1. 操作系统内部
  1. 虚拟机不是具有文件等优良特征的扩展计算机,相反,它仅仅是裸机硬件的精确复制品。这个复制品包含了内核态/用户态、I/O功能以及其他真是硬件所应该具有的全部内容。
由于每台虚拟机都与裸机相同,所以在每台虚拟机上都可以运行一台裸机所能运行的任何操作系统。
虚拟化,可以使人们在同一台机器上运行所有的服务器,而不会由于一个服务器崩溃,就影响其余的系统。
外核,这种程序在内核态中运行,它为虚拟机分配资源,并检查试图使用这些资源的企图,以确保没有机器会使用他人的资源。所以每个虚拟机只能使用已经申请并且获得分配的那部分资源。
  1. 为什么C适合编写操作系统
在C中分配的存储空间或者是静态的,或者是程序员明确分配和释放的,通常使用malloc以及free库函数。正是由于后面这个性质——全部由程序员控制所有内存——而且是用明确的指针,使得C语言对编写操作系统而言非常有吸引力。
Windows有500多万行代码。
二  进程与线程
(一)进程
一个进程就是一个正在执行的程序的实例,包括程序计数器、寄存器和变量的当前值。
停留在后台的进程称为守护进程。
  1. 四种事件导致进程创建:
    1. 系统初始化
    2. 执行了正在运行的进程所调用的进程创建系统调用
    3. 用户请求创建了一个新进程
    4. 一个批处理作业的初始化
  1. 四个条件引起进程终止:
    1. 正常退出(自愿的)
    2. 出错退出(自愿的)
    3. 严重错误(非自愿)
    4. 被其他进程杀死(非自愿)
  1. 进程的层次结构:
    1. UNIX里一个进程有一个父进程,多个子进程,它们共同组成一个进程组。
    2. Windows里没有进程层次,所有进程地位相同。父进程得到一个句柄,该句柄可以控制子进程。但父可以把这个句柄给别的进程,这样就不存在进程层次了。
  1. 进程的状态:
    1. 运行态(该时刻进程实际占用CPU)
    2. 就绪态(可运行,但因为其他进程正在运行而暂时停止)
    3. 阻塞态(除非某种外部事件发生,否则进程不能运行)
  1. 进程的实现:
为了实现进程模式,操作系统维护着一张表格(一个结构数组),即进程表(process table)。每个进程占用一个进程表项(有些作者把这些表项叫做进程控制块)。该表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过一样。
中断发生后操作系统最底层的工作步骤:
1、硬件压入堆栈程序计数器等。
2、硬件从中断向量装入新的程序计数器。
3、汇编语言过程保存寄存器值。
4、汇编语言过程设置新的堆栈。
5、C中断服务例程运行(典型地读和缓冲输入)。
6、调度程序决定下一个将运行的进程。
7、C过程返回至汇编代码。
8、汇编语言过程开始运行新的当前进程。
  1. 线程
每个进程中的内容:地址空间、全局变量、打开文件、子进程、即将发生的报警、信号与信号处理程序、账户信息;
每个线程中的内容:程序计数器、寄存器、堆栈、状态
  1. 调度程序激活机制:
当内核了解到一个线程被阻塞之后(例如,由于执行了一个阻塞系统调用或者产生了一个页面故障),内核通知该进程的运行时系统,并且在堆栈中以参数形式传递有问题的线程编号和所发生事件的一个描述,内核通过在一个已知起始地址启动运行时系统,从而发出了通知,这是对UNIX中信号的一种粗略模拟。这个机制称为上行调用(upcall)。
  1. 弹出式线程:
在分布式系统中经常使用。举个例子,如服务器请求,传统的方法是将进程或线程阻塞在一个receive系统调用上,等待消息到来。当消息到达时,该系统调用接收消息,并打开消息检查其内容,然后处理。
而弹出线程是,一个消息的到达导致系统创建一个处理该消息的线程,它的优点在于:线程新——没有必须存储的寄存器、堆栈之类,这样就有可能快速创建这类线程;消息到达与处理开始之间的时间非常短。
在弹出式线程前,要提前计划。
  1. 使单线程代码多线程化
对线程而言是全局变量,并不是对整个程序也是全局的,有许多变量之所以是全局的,是因为线程中的许多过程都使用它们(如同它们也有可能使用任何全局变量一样),但是其他线程在逻辑上和这些变量无关。
全局变量值被修改,线程获取全局变量时出错怎么办:每个线程有自己的全局变量的私有副本。
访问私有全局变量的一种方案:引入新的库过程,以便创建、设置和读取这些线程范围的全局变量。
  1. 进程间的通信(Inter Process Communication, IPC)
  1. 竞争条件:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。
  2. 互斥(mutual exclusion):阻止多个进程同时读写共享的数据。
  3. 临界区域(critical region)或临界区(critical section):对共享内存进行访问的程序片段。
  4. 要想避免竞争,要满足:
    1. 任何两个进程不能同时处于临界区
    2. 不应对CPU的速度和数量做任何假设
    3. 临界区外运行的进程不得阻塞其他进程
    4. 不得使进程无限期等待进入临界区
  1. 锁变量:有问题——在检查锁变量的值后,正准备改变它,这时别的进程检查它的值,会导致俩进程都进入临界区。
  2. 忙等待(busy watting):一个进程在等待时,连续测试一个变量直到某个值出现为止。这种方式浪费CPU时间,通常应该避免。
只有在有理由认为等待时间是非常短的情形下,才使用忙等待。用于忙等待的锁,称为自旋锁(spin lock)。
注意:一个进程比另一个进程慢了很多的情况下,轮流进入临界区不是个好方法。
  1. Peterson解法和TSL或XCHG解法都有忙等待的缺点。这些解法在本质上是:当一个进程想进入临界区时,先检查是否允许进入,若不允许,则该进程将原地等待,直到允许为止。
  2. 信号量和原子性:检查数值、修改变量值以及可能发生的睡眠操作均作为一个单一的、不可分割的原子操作完成。
保证一旦一个信号量操作开始,则在该操作完成或阻塞之前,其他进程均不允许访问该信号量。
这种原子性对于解决同步问题和避免竞争条件是绝对必要的。
所谓原子操作,是指一组相关联的操作要么都不间断地执行,要么都不执行。
  1. 互斥量:如果不需要信号量的计数能力,有时可以使用信号量的一个简化版本——互斥量。
  2. 管程:一种高级同步原语。一个管程是一个由过程、变量及数据结构等组成的一个集合,他们组成一个特殊的模块活软件包。进程可在任何需要的时候调用管程中的过程。任一时刻管程中只能有一个活跃进程。
  3. 消息传递
  1. 屏障:用于进程组。除非所有的进程都就绪准备着手下一个阶段,否则任何进程都不能进入下一个阶段。可以通过在每个阶段的结尾安置屏障(barrier)来实现这种行为。当一个进程到达屏障时,它就被屏障阻拦,直到所有进程都到达该屏障为止。
  1. 调度
在操作系统中,为CPU选择下一个要运行的进程的程序,称为调度进程,该程序使用的算法称为调度算法(scheduling algorithm)。
进程切换过程:
首先,用户态必须切换到内核态;
然后要保存当前进程的状态,包括在进程表中存储寄存器值以便以后重新装载;
接着,通过运行调度算法选定一个新进程;
之后应该将新进程的内存映像重新装入MMU;
最后新进程开始运行。
此外,进程切换还要使整个内存高速缓存失效,强迫缓存从内存中动态重新装入两次(进入内核一次,离开内核一次)。
总之,如果每秒钟切换进程的次数太多,会消耗大量CPU时间。
  1. 调度算法分类:
    1. 批处理:用户不需要短请求的快捷响应,常使用非抢占算法
    2. 交互式:抢占是必要的
    3. 实时:只运行用来推进现有应用的程序
  1. 调度算法设计取决于环境:
在不同环境中调度算法的目标:
所有系统:公平——给每个进程公平的CPU份额;策略强制执行——看到所宣布的策略执行;平衡——保持系统的所有部分都忙碌;
批处理系统:吞吐量——每小时最大作业数;周转时间——从提交到终止间的最小时间;CPU利用率——保持CPU始终忙碌;
交互系统:响应时间——快速响应请求;均衡性——满足用户的期望;
实时系统:满足截止时间——避免丢失数据;可预测性——在多媒体系统中避免品质降低。
1)运行大量批处理作业的大型计算中心的管理者为了掌握其系统的工作状态,通常检查三个指标:
吞吐量(throughout):系统每小时完成的作业数量。
周转时间(turnaround time):从一个批处理作业提交时刻开始,直到该作业完成时刻为止的统计平均时间——越小越好。
CPU利用率
  1. 交互式系统:最重要的是最小响应时间
  1. 批处理系统中的调度
    1. 先来先服务:进程按照它们请求CPU的顺序使用CPU,单一队列。
    2. 最短作业优先:先完成耗时短的。只有在所有作业都可同时运行的情形下,最短作业算法才是最优化的。
    3. 最短剩余时间优先:上面这个的抢占版。如果新进程比当前进程需要更少时间,当前线程就被挂起,而运行新的进程。
  1. 交互式系统中的调度
    1. 轮转调度:即时间片轮转算法。
时间片设的太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应时间变长,将时间片设为20ms~50ms比较合理。
b)  优先级调度:每个进程被赋予一个优先级,允许优先级最高的可运行进程先运行。
为了防止高优先级进程无休止地运行下去,调度程序可以在每个时钟中断降低当前进程的优先级。
优先级可以是静态赋予或动态赋予。
c)  最短进程优化:如何从当前可运行进程中找出最短的那一个进程——根据进程过去的行为推测
d)  彩票调度:向进程提供各种系统资源(如CPU时间)的彩票。一旦需要做出一项调度决策时,就随机抽出一张彩票,拥有该彩票的进程获得该资源。应用到CPU调度时,系统可以掌握每秒50次的一种彩票,作为奖励,每个获奖者可以得到20ms的CPU时间。
  1. 策略和机制
调度程序做出最优选择方法:调度机制与调度策略分离。
  1. 线程调度
用户级线程和内核级线程区别:差别在于性能。用户级线程切换需要少量的机器指令,而内核级线程需要完整的上下文切换,修改内存映像,使高速缓存失效,这导致了若干数量级的延迟。另一方面,在使用内核级线程时,一旦线程阻塞在I/O上就不需要像在用户线程中那样将整个进程挂起。
三  存储管理
操作系统中管理分层存储器体系的部分称为存储管理器(memory manager)。它的任务是有效地管理内存。
  1. 地址空间:把物理地址暴露给进程会带来严重问题,所以,需要存储器抽象——地址空间。
地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。
地址空间概念很通用,比如电话号码、邮编。
  1. 如何给每个程序一个自己的地址空间?
旧方法:简单的动态重定位,给CPU配两个特殊寄存器,当一个进程运行时,程序的起始物理地址装载到基址寄存器中,程序的长度装载到界限寄存器中。
缺点:每次访问内存都需要加法和比较运算。
  1. 两种处理内存超载的方法:
最简单的策略是交换(swapping)技术,即把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘。空闲进程主要存储在磁盘上,所以当它们不运行时就不会占用内存(尽管它们的一些进程会周期性地被唤醒以完成相关工作,然后就又进入睡眠状态)。
另一种策略是虚拟内存(virtual memory),该策略甚至能使程序在只有一部分被调入内存的情况下运行。
  1. 交换技术
交换会在内存中产生很多空闲区(hole),通过把所有进程下移,可能将小空闲区合成一大块,这叫内存紧缩(memory compaction)。但此方法太耗时,通常不用。
  1. 空闲内存管理:
动态分配内存时,操作系统对其管理,有两种方式:
  1. 位图:内存被划分成分配单元,每个单元对应位图中一位,0空闲,1占用(相反亦可)
  2. 空闲链表:维护一个纪录已分配内存端和空闲内存端的链表,其中一个结点或包含一个进程,或是两进程间的一个空闲区。
  1. 虚拟内存
基本思想:每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页或页面。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
分页:
虚拟内存本质上是用来创造一个新的抽象概念——地址空间,这个概念是对物理内存的抽象,类似于进程是对物理机器(CPU)的抽象。虚拟内存的实现,是将虚拟地址空间分解成页,并将每一页映射到物理内存的某个页框或者(暂时)解除映射。
加速分页的方法:
  1. 转换检测缓冲区(Translation Lookaside Buffer, TLB):它也叫相连存储器(associate memory),小型硬件设备,将虚拟地址直接映射到物理地址,而不必再访问页表。
5、页面置换算法:
最好的两种算法是老化算法和工作集时钟算法,它们分别基于LRU和工作集。
6、分页系统设计:
1)共享库:
在windows中称作DLL或动态链接库。
当一个程序和共享库(与静态库有些区别)链接时,链接器没有加载被调用的函数,而是加载了一小段能够在运行时绑定被调用函数的存根例程(stub routine)。
依赖于系统和配置信息,共享库或者程序一起被装载,或者在其所包含函数第一次被调用时被装载。当然,如果其他程序已经装载了某个共享库,就没有必要再次装载它了——这正是关键所在。
注意:当一个共享库被装载和使用时,整个库并不是被一次性地读入内存,而是根据需要,以页面为单位装载的,因此没有被调用到的函数是不会被装载到内存中的。
优点:可执行文件更小、节省内存;共享库中函数更新不用重新编译调用这个函数的程序,旧二进制文件依然可用。
2)内存映射文件:
进程中发起系统调用,把文件映射到虚拟内存,需要时按页读取,改动后写回到文件。
四  文件系统
  1. 文件:
文件是进程创建的信息逻辑单元,用来对磁盘建模,可以被看做一种地址空间。
  1. 目录
. 指当前目录, .. 指其父目录(在根目录中例外,根目录中它指向自己)
  1. 虚拟文件系统(Virtual File System , VFS)
五  I/O
  1. I/O设备:块设备(block device)和字符设备(character device)
I/O设备由机械部件和电子部件两部分组成。电子部件称作设备控制器(device controller)或适配器(adapter),以主板上的芯片或插槽中的电路板出现在个人计算机上。机械部件就是设备本身。
  1. 内存映射I/O(memory-mapped I/O):每个控制寄存器被分配唯一的一个内存地址,并且不会有内存被分配这一地址。
  1. I/O三种实现方式:
    1. 程序控制I/O (programmed I/O):让CPU做全部工作。以打印机为例:输出一个字符之后,CPU要不断查询设备以了解它是否就绪准备接收另一个字符。这一行为称为轮询(polling)或忙等待(busy waiting)。(低效)
    1. 中断驱动I/O :CPU在等待打印机变为就绪的同时做其他事情。(发生在每个字符上的中断要花费时间)
    1. 使用DMA的I/O :DMA控制器提供给打印机字符串,不打扰CPU,本质上是DMA是程序控制I/O,但由DMA而不是CPU做全部工作。
  1. I/O软件层次
用户及I/O软件
与设备无关的操作系统软件
设备驱动程序
中断处理程序
硬件
中断最终的结果是使先前被阻塞的驱动程序现在能够继续运行。
设备驱动程序:每个连接到计算机上的I/O设备都需要某些设备特定的代码来对其进行控制,这个代码由设备制造商编写并随设备一起交付。因为每个操作系统都需要自己的驱动程序,所以设备制造商通常要为若干流行的操作系统提供驱动程序。
六  死锁
  1. 死锁和不可抢占资源有关,有关可抢占资源的潜在死锁通常可以通过在进程之间重新分配资源而化解。
  2. 定义:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
  3. (资源)死锁的四个必要条件:
    1. 互斥条件:每个资源要么已经分配给了一个进程,要么就是可用的。
    2. 占有和等待条件:已经得到了某个资源的进程可以再请求新的资源。
    3. 不可抢占条件:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
    4. 环路等待条件:死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。
死锁发生时,这四个条件一定同时满足。
  1. 四种处理死锁的策略:
    1. 忽略该问题:也许你忽略它,它也会忽略你。
    2. 检测死锁并恢复:让死锁发生,检测它们是否发生,一旦发生死锁,采取行动解决。
    3. 仔细对资源进行分配,动态地避免死锁。
    4. 通过破坏引起死锁的四个必要条件之一,防止死锁的产生。
七  多媒体操作系统
  1. 视频点播基础设施包括三个基本组件:一个或多个视频服务器、一个分布式网络、每个房间对信号解码的机顶盒。
  2. 录像机(Video Cassette Recorder, VCR)。
八  多处理机系统
分布式系统
  1. 分布式系统面对不同硬件和操作系统实现某种统一性的途径是,在操作系统的顶部添加一层软件。这层软件成为——中间件(middleware)。
  1. Internet电子邮件地址格式:用户名@DNS主机名。
  2. Web的底层范式:web是一个由文档构成的巨大有向图。
每个web页面都有一个唯一地址——URL。
其格式为:protocol://DNS-name/file-name
  1. 基于文件系统的中间件:
    1. 传输模式:
      1. 上传/下载模式:在本地读写完文件,再传给服务器。(缺点是并发时文件一致性问题)
      2. 远程访问模式:客户端跟服务器一点一点交互。
b)  分布式系统中处理文件和目录命名的方式:
1)机器+路径名,如/machine/path或machine:path
2)将远程文件系统安装在本地文件层次中
3)在所有的机器上看来相同的单一名字空间
5、网格
网格(grid),是一个大的、地理上分散的、通常是由私有网络或因特网连接起来的异构机器的集合,向用户提供一系列的服务。
网格工作原理:在每个参与的机器中运行一组管理机器并且把它加入到网格中的程序。这个程序通常需要处理认证及远程用户登录、资源发布及发现、作业调度及分配等。当某个用户有工作需要计算机来做时,网格软件决定哪里有空闲的硬件、软件、数据资源来完成这项工作,然后将作业搬运过去,安排执行并收集计算结果返回给用户。
九  安全
  1. 数字签名:
通过对邮件或其他电子文档进行数字签名可以解决这类问题,并且保证了发送方日后不能抵赖。其中的一个通常使用的办法是首先对文档运行一种单向散列运算(hashing),这种运算几乎是不可逆的。散列函数通常独立于原始文档长度产生一个固定长度的结果值。最常用的散列函数有MD5(Message Digest 5),一种可以产生16个字节结果的算法(Rivest,1992)以及SHA-1(Secure Hash Algorithm),一种可以产生20个字节结果的算法(NIST,1995)。比SHA-1更新版本有SHA-256和SHA-512,它们分别产生32字节和64字节的散列结果,但是迄今为止,这两种加密算法依然没有得到广泛使用。
  1. 数字证书:
消息发送方的一种常用方法是在消息后附加数字证书,证书中包含了用户姓名、公钥和可信任的第三方数字签名。
一旦用户获得了可信的第三方认证的公钥,那么对于所有使用这种可信第三方确认来生成自己证书的发送方,该用户都可以使用他们的证书。
认证机构(Certification Authority ,CA)作为可信的第三方,提供签名证书。
关于MD5加密:
MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:
MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的 "抵赖",这就是所谓的数字签名应用。
MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。
正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5 值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P (62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。

认真学习系列:操作系统——视频+读书笔记相关推荐

  1. 《自己动手写操作系统》读书笔记——初识保护模式

    <自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...

  2. 《学习之道》读书笔记

    <学习之道>读书笔记 不要太过于专注,适当的时候要放松,启用发散思维,会让更多的想法出现来帮助解决问题. 爱迪生遇到棘手的问题,会拿着球,躺着睡一会,当睡着的时候球会从手中脱落,掉到预先准 ...

  3. 强化学习(RLAI)读书笔记第十六章Applications and Case Studies(不含alphago)

    强化学习(RLAI)读书笔记第十六章Applications and Case Studies(不含alphago) 16.1 TD-Gammon 16.2 Samuel's Checkers Pla ...

  4. 强化学习(RLAI)读书笔记第十六章Applications and Case Studies(alphago)

    强化学习(RLAI)读书笔记第十六章Applications and Case Studies(alphago) 16.6 Mastering the Game of Go 16.6.1 AlphaG ...

  5. 《Ubuntu Linux操作系统》读书笔记

    文|Seraph 一.Ubuntu安装与基本使用 Linux是一种起源于UNIX,以可移植操作系统接口(Portable Operating System Interface, POSIX)标准为框架 ...

  6. 2021微信小程序云开发学习路线【视频加笔记】

    从零开始学习小程序开发,小程序云开发的学习资料和路线!!想入门小程序请看下面内容~ 包括:云数据库,云函数,云托管,小程序云开发和服务器开发的项目实战,零基础学习JavaScript,小程序语法,cm ...

  7. 【“计算机科学与技术”专业小白成长系列】SICP 读书笔记: The Elements of Programming

    SICP 读书笔记: The Elements of Programming 编程元素 强大的编程语言不仅仅是一种指示计算机执行任务的方法.语言也可以作为一个框架,我们可以在其中组织关于过程的想法.当 ...

  8. VS 2008的JavaScript代码提示功能 (学习老赵视频的笔记)

    学习老赵的视频ASP.NET AJAX深入浅出系列课程(19):VS 2008的JavaScript代码提示功能(Level 200) 自己做的demo,记下来以便查阅!感谢赵老师! 原来js还可以像 ...

  9. 《Python深度学习》第一部分读书笔记

    第1章 什么是深度学习 文章目录 第1章 什么是深度学习 1.1 人工智能.机器学习与深度学习 1.1.1 人工智能 1.1.2 机器学习 1.1.3 从数据中学习表示 1.1.4 深度学习的深度 1 ...

最新文章

  1. java获取接口数据类型_java中调用第三方接口获取数据的方式
  2. 显示/隐藏Mac系统中所有的隐藏文件
  3. OpenStack精华问答 | OpenStack都有哪些基础服务?
  4. CSS中背景颜色、背景图片、渐变色、背景定位、精灵图(雪碧图)介绍
  5. 2020中国数字营销人才发展报告
  6. 数字化转型难?那是你没搞懂这5个关键点
  7. Angr Unsat_corn 使用之坑
  8. 百度App网络深度优化系列(一):DNS优化
  9. python自动化办公-用 Python 自动化办公能做到哪些有趣或有用的事情?
  10. 渗透测试技术----工具使用(二)--Nessus工具下载及使用(安装在Kali上)
  11. 直流电机开发笔记3—PI调节器的数字实现(代码/仿真)
  12. 高清美图和GIF动图素材网站推荐,拿走不谢!
  13. 如何使用SX1278的中断控制发送和接收
  14. 西门子S7200plc通信不上实际问题和解决方法
  15. Landscape Photography: Winter 风景摄影:冬天 Lynda课程中文字幕
  16. SSD学习系列(二)LMDB概念以及将VOC数据集转换成LMDB格式
  17. 课程1 谈论你喜欢的音乐
  18. SAP HANA HDBTable定义table语法
  19. 微信小程序ssm学生作业管理系统
  20. 【美股】美股中的几种分析形态

热门文章

  1. 服务器sata接口整体性能,SATA接口数量被大幅削减
  2. (五)自制数据同步程序 二次开发(模块化)打包发布说明
  3. 织梦php时间调用,织梦DedeCms时间格式调用汇总
  4. python:摄氏度华氏度转换
  5. 【FLASH 操作】FLASH 读写等操作 学习
  6. 数据库视图解析[普通视图、物化视图以及通过修改视图修改数据]
  7. EsotericSoftware Kryo —— 官方(1)
  8. BRD、MRD 和 PRD
  9. dell服务器维修点绵阳,绵阳戴尔电脑维修
  10. 华为HG522无线路由猫破解开启路由功能