操作系统
1.os基础
- 操作系统基本概念:运行在计算机上的一种程序,管理计算机上的软件和硬件资源,包括进程,内存管理,硬件设备管理等(内核负责)。
- 系统调用:运行在用户态的程序需要调用系统态下的资源,包括设备、文件、内存等。
2. 进程管理
-
进程和线程的概念、区别
- 进程是指的程序的执行过程,是资源分配的基本单位。进程占用内存多,切换复杂,进程间相互独立不会互相影响
- 线程是进程中执行运算的基本单位,一个进程中包含多个线程。线程相对于进程则恰好相反,占用内存小,且线程切换代价较小,线程间共用地址空间(堆)可能会相互影响。
-
进程的状态:5种分别是——创建、就绪、运行、阻塞、结束。如图:
-
进程间的通信方式
-
管道:分为匿名和命名管道;都以先进先出的方式通信??好像
-
匿名管道只能用于父子进程或兄弟进程间的通信,且存在与内存中。
-
命名管道可以是任意两个进程间进行通信,以磁盘文件的方式存在。
-
-
信号
- signal();用于通知接收进程某个事件已经发生
-
消息队列
- 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比 FIFO 更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。
-
信号量
是一个计数器,用于多进程共享数据的进程同步问题。
-
共享内存
- 多个进程共享内存空间,可以直接查看其它进程的数据(但是依赖于同步操作实现)
-
套接字
用于客户端和服务器端的通信,支持TCP/IP的网络通信的基本操作单元。
-
-
进程间的同步方式
- 互斥量,互斥对象只有一个,保证资源一定不会被多个进程同时访问(synchronized和各种lock)
- 信号量,允许多个进程访问同一资源,但是需要设置最大访问数量
- 事件
-
进程调度算法
时间片轮转算法,先到先服务,短作业优先,优先级调度,多级反馈队列调度。
-
死锁
- 产生原因:系统资源不足;进程推进顺序不当;资源分配不当
- 必要条件:互斥;不可剥夺;请求和保持;循环等待死锁的四个必要条件
- 预防:破坏死锁的必要条件
3. 内存管理
-
内存管理主要在干啥
- 负责内存分配(malloc)与回收(free),地址转换。
-
内存管理机制
- 分为连续分配和非连续分配
- 分块:连续的,碎片多
- 分页:离散的,将主存分页,使用页表对应逻辑地址和物理地址
- 分段:离散的,将主存分段,使用段表来对应逻辑地址和物理地址,(段有实际意义)
- 段页式:离散的,先将主存分段,再将段分页
-
快表和多级页表
- 快表:解决了逻辑地址到物理地址的转换速度,可以理解成是一种特殊的缓冲存储器,存放一部分经常访问的页表。
- 多级页表:为了解决有时候页表太大的问题,使用多级页表,在顶级页表中存放索引,将二级页表放在磁盘中。
-
分页机制和分段机制的共同点和区别
- 同:都是为了提高内存利用率,减少内存碎片;都是离散分配
- 异:页大小固定,由操作系统决定,段大小不确定,取决于当前运行程序;段是逻辑单位,有实际意义,比如代码段,数据段等,页没有实际意义。
-
逻辑地址、物理地址、CPU寻址
- 逻辑地址:也就是虚拟地址,由操作系统决定
- 物理地址:真实的物理内存中的地址
- CPU寻址:将虚拟地址翻译成物理地址,访问真实物理内存
-
为什么需要虚拟地址呢?
4. 虚拟内存
-
什么叫虚拟内存?
定义了一个连续虚拟地址空间,并将内存过渡到硬盘空间
-
局部性原理
-
概念/重要性:局部性原理是虚拟内存技术的基础,正是因为局部性原理,才可以只装入程序的一部分到内存就开始运行
-
原理表现:
- 时间局部性:如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作。
- 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。
-
-
实现方法:请求分页;请求分段;请求段页式——(都会导致缺页中断)
-
页面置换算法:
- OPT最佳页面置换算法:在以后最长时间不使用的页面换出。
- 先进先出:先进入内存的先换出,就是在内存里待得最久的先换出。
- 最近最久未使用:越久没用的越先换出。
- 最少使用:使用次数最少的换出。