基本常识:
(1)硬盘的访问延时,相比内存,是很慢的
(2)一般读写文件需要两次拷贝。比如读文件,需要从硬盘拷贝到操作系统内核,再从操作系统内核拷贝到应用程序分配的内存中。
1:BIO,NIO,AIO的区别(✔)
BIO:同步且阻塞的通信模式,服务器实现模式为一个连接一个线程.数据的读写必须阻塞在一个线程内等待其完成
NIO:同步非阻塞:服务器实现模式为一个请求一个线程,会轮询看IO是否空闲.
AIO:异步非阻塞:一个有效请求一个线程,客户端的IO请求都是OS先完成了再通知服务器应用去启动线程进行处理
同步和异步:同步就是一个任务的完成需要依赖另一个任务时,只有等待依赖的任务完成之后,依赖的任务才能完成。异步就是不需要等待被依赖的任务完成。
阻塞和非阻塞:阻塞是指调用结果返回之前,当前线程会被挂起,一直处于等待信息通知,不能执行其他业务
2:操作系统中的信号和信号量有什么关系?
所有的概念本质上都是用来解决资源的竞争访问。不同的操作会有不同的使用场合,他们的底层实现是操作系统和硬件合作来保证代码的原子性执行。
信号:是一种处理异步事件的方式。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身
信号量:进程间通信处理同步互斥的机质。是在多线程环境下使用的一种设施,它负责协调各个线程,以保证他们能够正确,合理的使用公共资源。
初始化时,会给它一个非负数的整数。信号量实际上就是一个值,这个值被用来解决临界区问题以及实现进程在多处理器环境下的进程同步。其中,两个最重要的信号量为二进制信号量和计数信号量,计数信号量可以表示为非负的整数而二进制信号量只存在0和1两个值。
3:操作系统换页算法(✔)
1):OPT页面置换算法(最佳置换算法)
2):FIFO页面置换算法:总是淘汰最先进入内存的页面
3):LRU页面置换法:最近最久未使用的页面给予淘汰.
4):LFU(最不经常使用)页面置换算法:内存内使用越频繁的页面被保留的事件相对越长.
4:进程,线程的上下文切换(✔)
线程切换:当在运行一个线程的过程中转去运行另一个线程,这个过程叫上下文切换(进程类似)
最主要的区别是:线程的切换虚拟空间内存是相同的,但是进程切换的虚拟空间内存则是不同的.
5:操作系统提供哪些锁(✔)
锁是一个整型数,用整形作为标志。
1):信号量:要么被占用,要么空闲。多元信号量允许同时被N个线程占有,超出N个外的占用请求将被阻塞。
2):互斥量:与信号量类似,但是互斥量的释放和获取必须是在同一个线程中进行的。
3):临界区:进程级别
4):读写锁:共享或独占
5):条件变量:通知机制。
6:进程间的通信方式(✔)
1):管道:用于具有亲缘关系的父子进程间或兄弟进程之间的通信
2):共享内存:使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新
3):信号:用来通知接受进程某个事件已经发生
4):信号量:是一个计数器
5):socket:用于客户端和服务器端的进程通信
6):消息队列
7:进程的调度策略(✔)
先到先服务
短作业优先
时间片轮转调度算法
多级反馈队列调度算法
优先级调度
最短剩余时间优先
高响应比优先
8:线程间的通信的方式(✔)
1):互斥量(mutex):只有拥有互斥对象的线程才有访问公共资源的权限
2):信号量:允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
3):使用事件:wait/notify
9:什么是系统调用(✔)
介绍系统调用之前,要先知道用户态和核心态
用户态:可以直接读取用户程序数据
核心态:可以简单的理解系统态运行的程序或进程几乎可以访问计算机的任何资源.
我们在用户态的时候,凡是与核心态级别的资源有关的操作,都必须通过系统调用的方式向操作系统提出服务请求.
10:什么是操作系统?(✔)
1):操作系统是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石
2):操作系统本质上是运行在计算机上的软件程序
3):操作系统为用户提供一个与系统交互的操作界面
4):操作系统分内核和外核.
11:操作系统的功能(✔)
1):设备管理
2):文件管理
3):进程管理
4):进程通信
5):内存管理
12:进程的状态(✔)
三个状态:
就绪态:获取了除CPU以外的所有必要资源,只等待CPU
执行态:获取到CPU,正在执行
阻塞态.:正在执行的进程由于某种原因暂时无法继续进行
13:线程间的同步方式(✔)
1):互斥量
2):信号量
3):使用事件
14:内存管理机制(✔)
操作系统的内存管理主要负责内存的分配和回收,另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是内存管理做的事.
15:常见的几种内存管理机制(✔)
连续分配管理(块式管理):将内存分为几个固定大小的块,每个块中只包含一个进程.
非连续分配管理:
页式管理:把主内存分为大小相等且固定的一页一页的形式,页较小,相对相比于块,划分力度更小,减少了碎片.页式管理通过页表对应逻辑地址和物理地址
段式管理:段式管理把主内存分为一段一段的,每一段的空间又要比页的空间小很多,但是段是有实际意义的,每个段定义了一组逻辑信息.
段页式管理机制:把主内存分为若干段,每段里面分成若干页.
16:分页机制和分段机制的共同点和区别(✔)
共同点:
1):分页机制和分段机制都是为了提高内存利用率,减少内存碎片
2):页和段都是离散存储的。
不同点:
1):页的大小是固定的,由操作系统决定,而段的大小不固定,取决于当前运行的程序
2):分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段.
17:逻辑地址和物理地址(✔)
逻辑地址是由操作系统决定的
物理地址指的是真实物理内存中的地址,是内存单元真正的地址.
18:什么是虚拟内存
虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且把内存扩展到硬盘空间,通过虚拟内存可以让程序可以拥有超过系统物理内存大小的可用内存空间。另外,虚拟内存为每个进程提供了一个一致的,私有的地址空间,它让每个进程产生了一种自己在独享内存的错觉,这样会更有效地管理内存并减少出错。
19:导致用户态到核心态的切换的情况(✔)
1):系统调用
2):异常
3):外围设备的中断。
20:poll,epoll和select的区别
(1) select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。
(2) select调用时,每次select调用时都需要从用户空间向内核空间复制fd数组,数组大小有限制,因为单个进程所能监视的fd数量存在最大限制,通常是1024。调用select后进程会阻塞,直到有某个fd就绪就返回。Select函数返回后,需要遍历fd数组来找到就绪的fd,时间复杂度是0(n).
(3) Poll本质上和select没有区别,但poll没有最大链接数的限制,因为它是基于链表来存储的。时间复杂度是0(n).
(4) epoll相对于select和poll来说,没有描述符限制,epoll使用一个文件描述符来管理多个描述符。将用户关心的文件描述符存放到内核的一个事件表中,这样在用户空间和内核空间只需要复制一次。epoll使用“事件”的就绪通知方式,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似callback的回调机制来激活该fd,epoll_wait便可以收到通知。时间复杂度为O(1)。
22:进程,线程,协程的区别(✔)
(1)进程是程序的一次执行过程,是系统执行程序的基本单位。一个进程可以产生多个线程,多个线程共享进程的内存和部分资源,但拥有自己的栈和程序计数器,线程之间的切换成本远远小于进程
(2)协程是用户态的轻量级的线程,协程的调度完全由用户控制,一个线程可以有多个协程。
23:什么是原语(✔)
若干指令组成的程序段,用来实现某个特定功能,具有原子性,在执行的过程中不可中断。P是阻塞原语,将进程从运行状态转为阻塞态,直到另一个进程唤醒它;V是唤醒原语,将被阻塞的进程唤醒。
24:liunx中进程有哪些状态(✔)
1):可执行状态,正在运行或者等待运行
2):可中断的等待状态
3):不可中断的等待状态
4):停止状态
5):终止状态(僵尸进程)
25:进程包含什么?(✔)
1):进程控制块(PCB):进程存在的唯一标识,包括进程描述信息,控制信息,资源分配信息等。
2):程序段:能被进程调度到CPU执行的代码
3):数据段:进程对应的程序加工处理的原始数据