操作系统面试

进程状态

创建、终止

就绪:资源全部准备就绪,正在等待CPU调度

运行:占有CPU,执行任务

阻塞:等待某一事件(比如输入输出)的发生或完成,即使有CPU也无法运行

线程状态

创建、终止

可运行:包括运行和就绪

等待:需要等待其他线程做出一些特定动作(通知或中断)

超时等待:在指定时间内

阻塞:需要等待锁释放

线程和进程的相同点

  • 独享程序计数器、栈、寄存器
  • 线程同样具有就绪、阻塞、运行三种基本状态,同样具有状态之间的转换关系
  • 都共享CPU,一个CPU在同一时刻只能执行一个进程或线程
  • 顺序执行
  • 可以创建子进程/子线程

线程和进程的区别

  • 进程是资源(包括内存、打开的文件等)分配的单位,线程是 CPU 调度的单位;
  • 进程独立拥有系统资源,而线程共享进程的地址空间;
  • 线程并发执行的时间和空间开销更小(切换开销、数据传递开销);
  • 线程之间不相互独立,会相互影响,有安全问题

线程的优点

  • 一个进程中可以同时存在多个线程;
  • 并发性:各个线程之间可以并发执行;
  • 资源共享:各个线程之间可以共享地址空间和文件等资源;
  • 轻量级:相比进程,切换开销小

线程能减少开销

  • 线程的创建时间比进程快,因为进程在创建的过程中,还需要资源管理信息,而线程在创建的过程中,不会涉及这些资源管理信息,而是共享它们;
  • 线程的终止时间比进程快,因为线程释放的资源相比进程少很多;
  • 同一个进程内的线程切换比进程切换快,因为线程具有相同的地址空间,这意味着同一个进程的线程都具有同一个页表,那么在切换的时候不需要切换页表。而对于进程之间的切换,页表的切换过程开销是比较大的;
  • 由于同一进程的各线程间共享内存和文件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更高了;

进程间通信

  1. 管道:FIFO,大小有限,阻塞,流传输。匿名:单向传输,只能用于存在父子关系的进程间通信;命名管道:可以用于不同的进程,可以双向传输
  2. 消息队列:保存在内核中的消息链表,大小有限,读写需要切换内核态和用户态,可随机查询消息(非fifo)
  3. 共享内存:相同的物理内存,多进程竞争资源
  4. 信号量:互斥和同步,避免竞争
  5. 信号:异步通信,通知接收进程某个事件已经发生
  6. socket:不同网络主机进程间的通信,也可以同主机

多线程竞争

锁:忙等待 自旋锁,无忙等待 加入阻塞队列

信号量:PV操作

生产者消费者模型

死锁

多个线程互相等待对方释放资源,导致所有进程或线程都无法继续执行下去。

虚拟地址

程序中使用的逻辑地址,通过MMU可以将虚拟地址映射到内存的物理地址

每个进程有独立的一套「虚拟地址」,虚拟地址为程序提供了一个独立的地址空间,使得每个程序可以在自己的虚拟地址空间中运行,而不会相互干扰

虚拟内存的作用

分配和回收内存

内存扩展(可以使运行内存大于物理内存,局部性原理,不常用的内存会被换出到硬盘)

防止进程相互影响,解决了多进程之间地址冲突的问题

非连续内存分配

分段:按照程序的逻辑进行划分;段是逻辑单位,大小不一致;有外部碎片,交换效率低

分页:页是物理单位,内存划分,大小一致;有内部碎片,占用内存空间大(可以使用多级页表,n级页表可以在需要时才创建,或者根据局部性原理暂时换出到硬盘)

TLB:在CPU中存储经常访问的页表项,提高访问速度

内存满了会发生什么

如果虚拟内存没有映射到物理内存,就发生了缺页中断,进程会从用户态切换到内核态去处理中断
如果有空闲的物理内存,就直接分配空间,并映射
如果没有,就回收内存(异步和同步)(换出到磁盘,需要时再调回,页面置换)
如果还是没有,OOM

文件系统结构

目录项,        索引节点(存储文件元信息)、数据块、超级块

软硬链接

硬链接:多个目录项中的「索引节点」指向一个文件

软链接:独立的 索引节点,但是这个文件的内容是另外一个文件的路径

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值