翻看本科的操作系统书,复习总结了下,以下知识点还是太浅了
中断:
中断是指某个事件(例如电源掉电、定点加法溢出或I/O传输结束等)发生时,系统中止现行程序的运行、引出处理该事件程序进行处理,处理完毕后返回断点,继续执行。
中断响应的实质是交换指令执行地址和处理器状态,以达到如下目的:保留程序断点及有关信息;自动转入相应的中断处理程序执行。硬件支持包括:指令计数器,处理器状态寄存器,中断向量表,系统堆栈。
中断向量包括中断服务例程入口地址和服务程序所用的处理机状态字。
中断处理过程:保护现场和传递参数;执行相应的中断服务例程;恢复和退出中断。
系统调用实际上是个自陷门,trap
系统启动三个阶段:
1)初始引导:把系统核心装入主存中的指定位置,并在指定地址启动。UNIX系统中,当磁盘中的引导块(第0块)读入主存后,引导块中的程序将核心从文件系统中装入主存。核心装入主存后,得到CPU的执行权,核心开始运行
2)核心初始化:执行系统核心的初启动子程序,初始化系统核心数据。UNIX系统如下:核心页表寄存器与核心数据的初始化;建立0#进程,它是系统建立的第一个并且永远处于核心态的唯一的进程,它的主要任务是按照系统的需要把即将运行的进程送入主存,并把近期内不运行的进程送到辅存上;建立1#进程,执行INIT程序,实现系统的初始化,负责为终端建立子进程,INIT进程是进程树的根
3)系统初始化:为用户使用系统做准备。例如:建立文件系统,建立日历时钟,建立命令解释程序等
Linux系统启动过程:
1)BIOS加电自检
检测计算机的硬件设备,按照CMOS设置的顺序搜索处于活动状态并且可以引导的设备,如光驱,硬盘,USB等
2)加载主引导加载程序(MBR)
512字节的映像,包含机器的二进制代码和一个小分区表。任务是查找并加载保存在硬盘分区上的次引导加载程序。通过分区表查找活动分区,将次引导加载程序读入内存,进入下一阶段
3)加载此引导加载程序(GRUB)
从/boot/分区读取Linux内核映像,加载到内存中,并把控制权交给Linux内核。
4)Linux内核映像
Linux内核检测硬件设置并初始化配置,自解压。加载设备驱动,初始化文件系统相关的虚拟设备,装载根文件系统/并挂载
5)INIT进程
进程号为1,进程启动后,初始化操作系统,并启动特定运行级别的自运行程序。
即init执行文件/sbin/init,然后/etc/rc.d/rc.sysinit配置环境变量、网络等,启动核心的外挂模块/etc/modprobe.conf,执行各批处理文件,执行/etc/rc.d/rc.local,执行/bin/login等待用户登录
进程:
进程与程序的联系和区别:
1)程序是指令的有序集合,是一个静态概念;进程是程序在处理机上的一次执行过程,是一个动态概念。程序可以作为软件资料长期保存,而进程是有生命周期的,会动态地产生和消亡。
2)进程是能独立运行的单位,能与其他进程并行的活动。
3)进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。
4)进程对应一个程序,一个程序可以对应多个进程。
进程状态:
就绪 (进程调度)运行(服务请求)等待(服务完成、事件来到)就绪
运行(时间片到)就绪
创建,消亡
进程控制块描述进程
线程:
线程是进程中的一条执行路径;有自己私有的堆栈和处理机执行环境;共享分配给父进程的主存;是单个进程所创建的许多个同时存在的线程之一。
进程和线程的区别与联系:
1)进程是一个可执行程序,定义了初始代码和数据,进程是系统资源分配的基本单位;而线程是任务调度的单位;
2)私用地址空间是进程可以使用的一组虚拟主存地址,线程之间共享进程的主存;
3)进程至少有一个可执行线程。
进程同步:
临界区:每个进程中,访问临界资源的那段程序
互斥和同步实现:
锁
信号灯
进程通信IPC:
(参照http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html)
目的:
A、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间
B、共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
C、通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
D、资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
E、进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
Linux进程通信方式:
(1)管道(pipe)和有名管道(FIFO)
(2)信号(signal)
(3)消息队列
msgget,msgsnd,msgrcv
http://blog.csdn.net/zhsp1029/article/details/2171462/
(4)共享内存
shmget,chmctrl
http://baike.baidu.com/view/3025906.htm#4
(5)信号量
semaphore
http://wenku.baidu.com/view/ae193740336c1eb91a375d68.html
(6)套接字(socket)
(7)文件和记录锁定
死锁:
在两个或多个并发进程中,如果每个进程持有某种资源而又都等待着别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。
必要条件:
1)互斥条件:涉及的资源是非共享的,即一次只有一个进程使用
2)不剥夺条件(非抢占):进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,只能由获得该资源的进程自己释放
3)占有并等待(部分分配):进程每次申请它所需要的一部分资源,在等待新资源的同时,继续占有已有资源
4)环路条件(循环等待):存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中下一个进程请求
预防死锁策略:
1)采用资源静态一次性分配方法预防死锁
2)采用资源动态分配、有控分配方法来避免死锁
3)当死锁发生时进行检测,设法修复
4)忽略死锁,认为它不可能发生
死锁避免:
有序资源分配法(资源浪费)
银行家算法(每个进程必须实现知道资源最大需求量)
作业调度算法:
1)先来先服务算法
2)短作业优先调度算法
3)响应比高者优先调度算法:响应比 = 1 + 作业等待时间/执行时间
进程调度:
1)进程优先数调度算法:
优先数根据进程所需使用的资源来计算;基于程序运行时间的估计;基于进程的类型
2)循环轮转调度:
简单循环;可变时间片
放置策略(空闲区分配):Linux buddy系统
首次适应算法(快速)
最佳适应算法(碎片问题)
最坏适应算法
页面置换算法:
FIFO
LRU(最久未使用,latest recently reused)(常用)
LFU
I/O控制方式:
循环测试I/O方式
I/O中断方式
通道方式
DMA:
DMA控制器接管地址线的控制权,直接控制DMA控制器与主存的数据交换,减轻了CPU的负担,使I/O数据传送速度提升。
设备:
字符设备:文件读写
块设备:高速缓冲
inode:
目录项只有文件的名字和inode节点编号,文件信息存储到inode区