操作系统知识点总结

1 进程和线程,死锁,
     进程是资源分配的基本单位,是一个程序在一个数据集合上的一次运行过程,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是进程的一个实体,是被系统
     资源分配给进程,同一进程的所有线程共享改进程的资源。
     线程是cpu调度和分配的基本单位。
     进程是程序的一次执行,线程可以理解为进程中执行的一段程序片段。进程间是独立的,这表现在内存空间,上下文环境上,线程运行在进程空间内。一般来讲,进程无法突破进程边界存取其他进程内的存储空间,而线程由于处在进程空间内,所以同一进程所产生的线程共享同一内存空间。线程是属于进程的,当进程退出是该进程所产生的线程都会被强制退出并清除,线程占用的资源少于进程占用的资源。
     死锁是两个或两个以上的进程在执行过程中因争夺资源而造成的一种互相等待的现象。而进程推进顺序不当也可能引起死锁。
     产生死锁需具备以下条件:
          互斥条件:资源只能由一人占用
          请求和保持条件:进程至少已保持一个资源,但要请求其他资源,同时对自己已保持的资源又不放
          不剥夺条件:已获得的资源不能被剥夺
          环路等待条件: 若干进程之间形成一种头尾相接的循环等待资源关系。
     解决方法:
          有序资源分配法,对资源进行编号,一次全部申请而且申请次序相同
          银行算法:检查申请者对资源的最大需求量,如果现存资源可以满足,就满足其要求。

2 进程间通信的几种方式,线程间通信的几种方式,
     进程间通信:目的是数据传输;共享数据;通知事件;资源共享;进程控制;--常用的方式是信号,信号量,消息队列,共享内存。
     信号和信号量是不同的,虽然都可以用来实现同步和互斥,但前者使用的是信号处理器,后者是P,V操作。
     消息队列是比较高级的一种进程间通信方法,它可以在进程间传递信息,一个消息队列可以被多个进程所共享,共享消息队列的进程所发的消息除了message本身之外还有一个标志,它可以致命该消息将由哪个进程或是哪类进程接受。
          同主机之间数据交互机制:无名管道pipe 有名管道fifo
          同主机进程间同步机制: 信号量semaphore 主要作为进程间以及同一进程不同线程之间的同步手段。用来保证两个或多个关键代码段不被并发调用。允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。
               P操作 申请资源:
              (1)S减1;
               (2)若S减1后仍大于等于零,则进程继续执行;
               (3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转入进程调度。
               V操作 释放资源:
               (1)S加1;
               (2)若相加结果大于零,则进程继续执行;
               (3)若相加结果小于等于零,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。
          同主机进程间异步机制: 信号signal用来通知进程有事发生。
          网络主机间数据交互机制: 套接字socket
          socket是为了区分不同应用程序进程间的网络通信和连接。三个参数:通信的目的IP地址,使用的传输层协议,使用的端口号。要通过互联网通信至少需要一对套接字,一个在客户端机,ClientSocket, 一个在服务器端serverSocket。三个步骤,服务器监听,客户端请求,连接确认。

3 signal和semaphore各自用途,mutex, critical section, share memory
     信号量应用在进程之间的同步互斥通信,信号则是进程的异步机制,用来通知进程有事发生。
     临界区critical section是保证在某一时刻只有一个线程能访问数据的简便方法。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。EnterCriticalSection()语句执行后代码将进入临界区以后无论发生什么,必须确保与之匹配的 LeaveCriticalSection()都能够被执行到。
     互斥量Mutex 只有拥有互斥对象的线程才具有访问资源的权限。由于互斥资源只有一个,就保证了任何情况下此共享资源都不会同时被多个线程所访问。使用互斥不仅仅能在同一应用程序不同线程实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

 大端存储和小端存储
Big-endian & small-endian
小端就是低位字节排在内存的低地址端,高位字节排在内存的高地址端。
大端就是反过来。
大端模式类似于字符串在内存中的存储。

小端模式:强制转换数据不需要调整字节内容,1 2 4 字节存储方式一样。
大端模式:符号位的判定固定为第一个字节,易判定正负。

为什么会有大端小端之分:每个地址单元对应一个字节,一个字节是8bit,x86一般是小端模式。
验证的时候一个是可以用强制的类型转换,一个是可以用union这种结构,因为它本身就是把低位数据存储在低地址当中的,从而verify。顺便说一下union,它是为了节省空间的考虑,它的size是它最大的数据成员的大小,其中数据成员所引用的都是数据结构的起始位置。

通讯协议一般而言是大端的。

两者如何进行转换?:
十六位:
先转换到可以表示的uint16的范围,然后再进行移位。
  1. #define BigtoLittle16(A) (( ((uint16)(A) & 0xff00) >> 8) | \
  2. (( (uint16)(A) & 0x00ff) << 8))
  3. #define BigtoLittle32(A) ((( (uint32)(A) & 0xff000000) >> 24) | \
  4. (( (uint32)(A) & 0x00ff0000) >> 8) | \
  5. (( (uint32)(A) & 0x0000ff00) << 8) | \
  6. (( (uint32)(A) & 0x000000ff) << 24))
socket接口编程中,有专门的函数做大小端的转换:
  1. #define ntohs(n) //16位数据类型网络字节顺序到主机字节顺序的转换
  2. #define htons(n) //16位数据类型主机字节顺序到网络字节顺序的转换
  3. #define ntohl(n) //32位数据类型网络字节顺序到主机字节顺序的转换
  4. #define htonl(n) //32位数据类型主机字节顺序到网络字节顺序的转换
5 操作系统段页式存储管理
是分段式存储管理和分页存储管理的结合。先将用户程序分成若干个段,再把每个段分成若干个页。要想完成,需要知道一个段号,一个段内页号,还有一个页内地址。
在段页式系统中,为获得一条指令或数据,须三次访问内存,第一次访问是访问内存中的段表,从中取得页表始址,第二次访问页表,从中取出该页的物理块号,并将快号与页内地址一起构成物理地址,第三次访问才是从物理地址中取出指令或数据。
页式管理:
所有页的长度都是一样的,但是各个段的长度不一样。(访问两次内存,首先拿到页号和页内地址计算出物理地址,再访问物理地址)。每个进程有一个页表,只要被执行进程的页表常驻内存,别的不用。
段式管理:
段式管理不会产生内部碎片,它的大小并不等长。
分段与分页的主要区别:
- 段是信息的逻辑单位,是根据用户的需要划分的,因此段对用户可见,页是信息的物理单位,是为了管理主存方便划分的,对用户是透明的。
- 页的大小固定不变,由系统决定,段的大小并不固定,由其完成的功能决定。
- 段式提供的是二维的地址空间,页式是一维的,页号和页内偏移是机器硬件的功能。
- 由于段是信息的逻辑单位,便于存储保护和信息共享,页的保护和共享受到限制。
- 分页是物理地址,目的是实现离散分配,减少外部碎片,提高内存利用率,
- 分页的优点体现在内存空间的管理上,分段体现在地址空间的管理上。
可变分区存储管理主要是可以集中空闲区。位示图是用来磁盘空间管理的,二进制表示盘块使用情况。

数据传输的DMA方式,
绕过CPU,DMA控制器直接进行。

7 内存管理的LRU算法:最近最少使用
原理:前面几条指令中频繁使用的页面很可能在后面的几条指令中频繁使用,反之亦然。算法内容就是在每次调换的时候,找到最近最少使用的那个页面调出内存。

8 进程和程序的本质区别是动态和静态特征

9 系统是根据PCB进行进程控制和管理的:
内容:进程名字,进程状态,相应程序和数据地址,进程资源清单,优先级,cpu状态,进程同步与通信机制
,PCB链接字

10 Spooling 技术
是低速输入输出设备与主机交换的一种技术:主要是开辟一块额外的缓冲区,建立等待队列。虚拟设备功能,多用于打印机类的设备共享。缓冲区包括输入井和输出井。

11 存储管理覆盖技术与交换技术
覆盖:就是在较小的可用内存中运行较大的程序。留一些必要的在内存里面,可选的从外寸随时覆盖。主要是用时间延长来换空间节省。
交换:暂停执行中的进程,整个地址空间换到外存的交换区中。将外存中就绪的换进来。

12 进程调度算法:
- FIFO 质量不佳,只能做辅助
- 最短CPU运行期优先调度算法: 比较难预测
- 轮转法:分时系统中,时间片轮转

13 进程的三种状态:就绪 执行 等待(阻塞)
1.就绪–>执行 2.执行–>就绪 3.执行–>等待  4.等待–>就绪
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值