什么是系统调用呢?
用户态(user mode) : 用户态运行的进程可以直接读取用户程序的数据。
系统态(kernel mode):可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。
系统调用就是用户态切换到内核态。
线程和进程以及它们的区别
1、线程是CPU调度和分配的基本单位,进程是系统资源调度和分配的基本单位。
2、一个进程里有多个线程,多个线程可以并发执行,如果一个线程中断了,那么这个进程就结束了。多个进程可以并行执行,互不影响。
3、每个进程都有独立的代码和资源,而每个线程都有自己的程序计数器,线程共享资源,线程间切换的开销小。
进程有哪几种状态? 5种
创建、就绪、运行、阻塞、结束
进程间的通信方式
管道、信号量、消息队列、共享内存、套接字
线程间的同步的方式有哪些?
互斥量、信号量、事件
进程的调度算法
1、先到先服务(FCFS)调度算法
2、短作业优先(SJF)的调度算法
3、时间片轮转调度算法
4、多级反馈队列调度算法
5、优先级调度
什么是死锁
多个进程/线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于进程/线程被无限期地阻塞,因此程序不可能正常终止。
死锁的四个条件
互斥、请求和保持、循环等待、不可抢占
解决死锁的方法
预防,避免,检测和解除四种。
死锁的预防
1、静态分配策略
2、层次分配策略
死锁的避免
银行家算法
操作系统常见的几种内存管理机制
块式管理:将内存分为几个固定大小的块,每个块中只包含一个进程。
页式管理 :把主存分为大小相等且固定的一页一页的形式,页较小,相比于块式管理的划分粒度更小,提高了内存利用率,减少了碎片。
段式管理 :段式管理把主存分为一段段的,段是有实际意义的,每个段定义了一组逻辑信息
简单来说:页是物理单位,段是逻辑单位。分页可以有效提高内存利用率,分段可以更好满足用户需求。
段页式管理机制 : 简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制 中段与段之间以及段的内部的都是离散的。
快表
为了提高虚拟地址到物理地址的转换速度,操作系统在 页表方案 基础之上引入了 快表 来加速虚拟地址到物理地址的转换。我们可以把快表理解为一种特殊的高速缓冲存储器(Cache),其中的内容是页表的一部分或者全部内容。
多级页表
引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。
分页机制和分段机制的共同点和区别
1、共同点 :
分页机制和分段机制都是为了提高内存利用率,减少内存碎片。
页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的。
2、区别 :
页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序。
分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。
什么是虚拟内存?
虚拟内存是它定义了一个连续的虚拟地址空间,并且把内存扩展到硬盘空间
什么是局部性原理
某个较短的时间段内,程序执行局限于某一小部分,程序访问的存储空间也局限于某个区域。利用局部性原理实现髙速缓存
页面置换算法
最佳页面置换算法
FIFO(First In First Out) 页面置换算法(先进先出页面置换算法)
LRU (Least Recently Used)页面置换算法(最近最久未使用页面置换算法)
LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法)
孤儿进程和僵尸进程
僵尸进程:一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,这种进程称之为僵死进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
危害:孤儿进程并不会有什么危害,而大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。
线程数量根据什么考虑:
CPU密集型任务:一般配置线程数=CPU总核心数+1
IO密集型任务:一般配置线程数=CPU总核心数 * 2 +1 (一般情况)
CPU密集型:所谓CPU密集型就是说处理任务不需要依赖外部I/O,比如科学计算、矩阵运算等等。
I/O密集型:这一类任务可能计算部分所占用时间不多,大部分时间都用在了比如磁盘I/O、网络I/O等,记为WT(wait time),以及CPU计算所需要的时间,这里极为CT(computing time),那么对于一个N核的系统,合适的线程数大概是N * (1 + WT/CT)
网友评论