操作系统笔记(1)

来源:互联网 发布:网络文明调查问卷 编辑:程序博客网 时间:2024/06/09 22:19

1.  操作系统的功能

内存管理功能,处理机调度功能,设备管理功能,文件管理功能。

2.   核心模式

核心模式指的是操作系统管理程序运行的状态,具有比较高的特权级别。

用户模式指的是一般用户程序运行时的状态,具有比较低的特权级别。

模式转换的唯一途径是中断。

3.   系统调用的工作机制

   用户在执行特权指令时,调用系统调用,陷入内核(在陷入内核时,会同时向OS内核传入一个系统调用号i)进入内核后,根据i查找系统调用表,找到调用号为i的系统调用的处理代码。 内核执行完系统调用处理代码后,从核心态返回用户态。

4.  进程和程序

(1)进程是程序在处理器上的一次执行过程是一个动态概念,程序是代码的有序集合,是静态的。

(2)进程由程序,数据和进程控制块组成,程序只是代码的有序集合。

(3)二者是多对多的关系。

5.并发和并行

并发:concurent      并发在微观上不是同时执行的,只是把时间划分成很多段,使多个进程交替的执行。因此在多个进程存在资源冲突时,并发本质上并没有提高执行效率。

并行:parallel          并行指的是不论微观和宏观,二者都是一起执行。

 6.线程

线程是轻量级进程,是CPU调度的基本单位。它包含一个线程ID,一个程序计数器,一个寄存器组,一个堆栈。它与同一个进程的其他线程共享代码段,数据段。每个线程有自己的寄存器和堆栈。

7.CPU调度准则

先来先服务原则(FCFS)

短作业优先(SJF)/最短剩余时间优先

时间片轮转调度(RR)

多级队列调度算法

多级反馈队列调度算法

8.死锁产生的必要条件

  (1)互斥(至少有一个资源是非共享的)

  (2)持有并等待

  (3)不可抢占

  (4)循环等待条件

  处理死锁 的方法:   

   (1)死锁预防/避免

   (2)死锁恢复

   (3)忽视死锁

 9.分段,分页

(1)页面是信息的物理单位,分页是为了实现非连续的内存分配,以便解决内存碎片问题,分页是由于系统管理的需要。段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好的实现共享,满足用户需求。

(2)页面的大小固定且有系统确定,将逻辑地址划分为页号和页内地址是由机器硬件决定的。而段的长度不固定,它取决于用户编写的程序。通常由编译程序在对源程序编译时根据信息划分。

(3)分页 一维      分段  二维。

 10.内存页面置换算法

   (1)最佳页面置换算法  未来最长时间不被访问到。

   (2)先进先出页面置换算法(FIFO)。

   (3)最近最久未用置换算法(LRU)。

 11.磁盘调度算法

   (1)FCFS 根据进程访问磁盘的先后次序调度。

   (2)SCAN 磁头不停地往复运动,由边缘至中心然后返回。

   (3)CSCAN   SCAN基础上规定磁头单想扫描。

 12.进程和线程区别

 (1)一个进程可以包含多个线程,它们共享进程的拥有的资源。

 (2)进程是资源分配的基本单位,线程作为独立调度的基本单位。

  (一个进程之间的线程共享代码,数据段,堆,打开的文件,每个线程有自己的寄存器栈,程序计数器。)

 (3)通信的区别:进程之间通过IPC通信(共享内存,消息传递,队列,邮箱),线程之间直接读写进程的数据段。

 (4)线程的上下文切换比进程快。

 13.使用多进程和多线程区别

  (1)多进程有自己的地址空间,多线程则共享地址空间。

  (2)多线程更快,资源利用率更高。

  (3)线程使用公共变量要考虑同步问题,因为它们在同一地址空间。

 14.多线程同步机制

Linux下创建线程 pthread_create(id,NULL,thread_function,NULL)

(1)      临界区

(2)      互斥量(不仅可以用在同一应用程序不同线程之间实现资源的安全共享,也可以在不同应用程序的线程中实现对资源的安全共享。)

(3)      信号量(允许多个线程使用共享资源,但是限制了同一时刻访问此资源的最大线程数。)

(4)      事件用来通知有一些事件已经发生,从而启动后继任务。

 互斥量和临界区的作用类似,但是互斥量是跨进程的。互斥量开销大。

 

15.进程间通信的方式:

(1)      共享内存

(2)      管道  用于进程通信的特殊文件,匿名管道用于本地系统中父进程和它启动的子进程之间通信。命名管道使客户端和服务器程序可以通过它通信。

(3)      信号量

(4)      共享文件

(5)      消息机制(windows操作系统的一种驱动机制,利用消息进行进程通信,是用消息激活某种操作的过程,数据发送,数据接收。)

 16.程序活动记录

32位系统之中,系统的内存虚拟地址范围为4GB,其中低2GB为应用程序使用(RING3级别),而高2GB为系统内核使用(RING0级别)。

每一个程序都有属于自己的一个私有2GB虚存空间。

 0x00000000 到 0x0000ffff   64KB为NULL地址区

 0x0000ffff 到  0x7ffff0000  进程空间

 0x7ffff0000 到 0x7ffffffff   64KB非法区域  (分割进程空间和内核空间)

 0x7ffffffff到0xffffffff      内核空间

 程序执行时,传递给CPU的地址是逻辑地址,它由两部分组成,一部分是段选择符,另一部分是有效地址(偏移量)。逻辑地址必须经过映射转换变成线性地址,线性地址再经过一次映射转为物理地址,才能真正访问物理内存。

(1)    

      逻辑地址转化为线性地址

      逻辑地址以 段寄存器:偏移地址形式存在,从段描述符表里找到段基址,然后用基址加入段内偏移量,就得到相应的线性地址。

 (2)

        线性地址转化为物理地址

        线性地址分为3部分:页目录索引,页表索引,字节偏移索引。

 17.进程空间的程序布局

从内存地址由低到高:

 全局变量区:存放程序中的全局变量。

静态常量数据区。

代码区:  用于存放程序中的可执行代码。

变量:   存放程序的局部变量。

堆:     用来动态分配程序内存。

空闲区:  程序未使用的内存部分。

栈:    程序自己的私有栈,增长方向从高到低。

 18.堆栈区别

 (1)      内存区别

堆:由程序员负责申请和释放。

栈:由系统自动分配和释放  。(存放函数的参数值,局部变量的值)

(2)      资源分配的具体体现上

堆:堆的分配是通过操作系统的一个记录空闲内存地址的链表来实现的,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该空闲结点从链表中删除。

栈:每个进程都拥有自己的一个固定连续的栈空间。在系统分配时,只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常栈溢出。

(3)      大小限制

堆:堆的大小受限于计算机系统中有效的虚拟内存,堆获得空间比较灵活,也比较大。(向低地址扩展)

栈:向高地址扩展,栈的大小是固定的,且是有限的。

(4)      效率

堆分配较慢,且容易产生碎片。

栈分配较快。

(5)      存放内容

 堆:在堆的头部用一个字节存放堆的大小,剩余部分由程序员决定。

 栈: 栈用来记录程序执行时函数调用过程中的活动记录(栈帧)。

 tips:

函数调用时首先入栈的是参数(大多数C编译器中,参数由右往左入栈),

然后是返回地址,

然后是老的ebp寄存器中的,

最后是分配函数中的局部变量。(静态变量存储在静态存储区,所以不入栈)

 19.函数调用规约

(1)当参数多余一个时,按照什么顺序把参数压入堆栈。

(2)函数调用后,由谁把堆栈恢复原态。

stdcall

参数从右往左入栈,由被调用函数自身修改堆栈。

cdecl C调用规约

参数从右往左入栈,调用者还原堆栈。

fastcall

函数的第一个和第二个参数通过ecx和edx传递,剩余参数从右到左入栈。被调用者修改堆栈.

 

原创粉丝点击