操作系统面试题

进程与线程的区别

​ 进程是操作系统分配资源的最小单位;

​ 线程是进程的实体,是CPU调度和分派的基本单位

线程同步的方式有哪些,也就是线程间通信

互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。

信号量:它允许同一时刻多个进程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。

事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

操作系统线程有哪几种状态

​ 新建状态、就绪状态、运行状态、阻塞状态及死亡状态。

Java线程有几种状态

​ New(新建状态)、Runnable(可运行)、Blocked(被阻塞)、Waiting(等待)、TimeWaiting(计时等待)、Terminated(已终止)

进程间通信方式

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

PCB进程控制块

​ PCB是进程存在的唯一标识,一个进程对应一个PCB。

##### PCB具体包含什么信息呢?

​ 进程描述信息:进程标识符、用户标识符。

​ 进程控制和管理信息:进程当前状态、进程优先级

​ 资源分配清单

​ CPU相关信息

##### 每个PCB是如何组织的?

​ 一般通过链表的方式进行组织,把具有相同状态的进程链在一起,组成各种队列。

​ - 将所有处于就绪状态的进程链在一起,称为就绪队列

​ - 所有因等待某事件而处于等待状态的进程链在一起就组成各种阻塞队列

​ 还有索引方式,它的工作原理:将同一状态的进程组织在一个索引表中,索引表项指向相应的PCB,不同状态对应不同的索引表。

进程的上下文切换

​ 一个进程切换到另一个进程运行,称为进程的上下文切换

##### 进程的上下文切换的是什么

​ 进程是由内核管理和调度的,所以进程的切换只能发生在内核态。

​ 所以,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。

##### 发生上下文切换的场景

​ 为了保证所有进程可以得到公平调度,CPU时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。这样,当某个进程的时间片耗尽了,就会被系统挂起,切换到其它正在等待CPU的进程运行

进程在系统资源不足时(比如内存不足),要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运行。

​ 当进程通过睡眠函数sleep这样的方法将自己主动挂起时,自然也会重新调度。

​ 当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高优先级进程来运行。

​ 发生硬件中断时,CPU上的进程会被中断挂起,转而执行内核中的中断服务程序;

线程的上下文切换

​ 需要区别两个线程是不是属于同一个进程

​ 当前线程不是属于同一个进程,则切换的过程就跟进程上下文切换一样。

​ 当两个线程是属于同一进程,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源就保持不动,只需要切换线程的私有数据、寄存器等不共享的数据。

线程的实现

​ 主要有三种线程的实现方式

用户线程:在用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来完成线程的管理。

内核线程:在内核中实现的线程,是由内核管理的线程;

轻量级进程:在内核中来支持用户线程。

##### 用户线程和内核线程的对应关系

​ 多个用户线程对应一个内核线程、一个用户线程对应一个内核线程、多个用户线程对应多个内核线程

##### 用户线程如何理解?存在什么优势和缺陷?

用户线程的整个线程管理和调度,操作系统是不直接参与的,而是由用户级线程库函数来完成线程的管理,包括线程的创建、终止、同步和调度等。

内核线程如何理解?有什么优缺点

内核线程是由操作系统管理的,线程对应的TCB自然是放在操作系统里的,这样线程的创建、终止和管理都是由操作系统负责的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值