面经——操作系统(linux为例)

异步通知

进程之间通信的途径有哪些?

答:进程间通信主要通过管道、消息、信号等途径进行。

多进程与多线程

  • 概念:进程是资源分配的最小单元,线程是CPU调度的最小单元。一个进程中可以有多个线程。进程之间数据独立,同一进程的线程之间数据可以共享。线程的调度、通信等开销小。
  • 适用需要频繁创建和销毁的用线程。需要大量计算且频繁切换的用线程。并行操作用线程。数据隔离、相对独立和安全用进程。多线程适合多核心CPU,多进程适合分布式系统;一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉,所以多进程要比多线程健壮。
  • 优缺点:
    (1)进程的优点:顺序程序的特点:具有封闭性和可再现性;程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。(2)进程的缺点:操作系统调度切换多个进程的开销较大。而且进程间内存无法共享,通讯也比较麻烦。在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销较大。(3)运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间(代码段、堆栈段和数据段),共享大部分数据,启动一个线程所耗费的资源较小,而且,线程间彼此切换和通信所需的时间也较小。(4) 线程的缺点:调度时, 要保存线程状态,频繁调度, 需要占用大量的机时;程序设计不方便(线程同步问题)。

内存问题概念

(1)内存泄露,堆中分配的内存用完没释放,导致该区域内存被占用无法继续使用。(2)内存溢出,是指程序在申请内存时,没有足够的内存空间供其使用,就是说,你要的内存空间超过了系统实际分配的空间。出现out of memory;比如申请了一个 int,但给它存了 double,那就是内存溢出。

一个进程可以创建多少线程

进程的虚拟地址空间为2GB,每个线程栈是1MB,理论上可以创建2048个。

内核态和用户态

内核态(管态),它具有较高的特权级别。当处理器处于管态时,他可以执行所有的指令,包括各种特权指令,也可以使用所有的资源,并且具有改变处理器状态的能力。
用户态(目态),即用户程序运行时的状态,它具有较低的特权级别。在这种状态下不能使用特权指令,不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间。每个进程都在各自的用户空间中运行,而不允许存取其他程序的用户空间。
三种转换方式:(1)系统调用,或c库也会进行系统调用。这是一种主动进入的方式,为了获取应用层获取不到的资源(2)异常,比如却也异常。在用户态下面,发生了什么问题,会进入内核态。这是一种被动的方式。(3)外部中断。当外部设备诸如显卡、通信总线等,发出请求时,会进入内核态处理中断。

信号量与互斥锁的区别?

(1)、互斥量用于互斥,信号量用于同步。(2)、互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。(3)、互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。

死锁

https://blog.youkuaiyun.com/hd12370/article/details/82814348

死锁解决

文件系统

在LINUX系统中有一个重要的概念:一切都是文件。
ext4

自旋锁 互斥锁 读写锁

自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁可用,不会让出CPU,好处是可以少进程从睡眠到唤醒的开销。
如果一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起(不占用任何cpu资源),直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。

原子操作

指的是由多步操作组成的一个操作。几个步骤一气呵成,不会被打断。一个CPU核在执行原子操作时,其他CPU核必须停止对内存操作或者不对指定的内存进行操作,这样才能避免数据竞争问题。
内存屏障:内存屏障强制保证在它之前的所有的内存操作指令必须完成后才能执行之后的指令.也就是内存屏障指令保证了该点的顺序一致性。

线程的基本状态

就绪态,阻塞态,运行态

线程互斥与同步

  • 互斥锁,自旋锁、读写锁、
  • 条件变量、信号量

实时操作系统与非实时操作系统

https://blog.youkuaiyun.com/renzemingcsdn/article/details/119295951

重入函数

不可重入的一些条件:函数体内使用了静态的数据结构;在和硬件发生交互的时候,关闭硬件中断,完成交互记得打开中断,在有些系列上,这叫做“进入/ 退出核心”;函数体内调用了malloc()或者free()函数;函数体内调用了某些不可重入函数。
如果设计全局变量要加锁。谨慎使用堆栈。

中断与异常的区别

中断的描述主体是外设,而异常的描述主体是CPU。中断是一个过程,是CPU在执行当前的程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。异常主要是从CPU角度,接受信号的。中断主要是从外设角度,向CPU发送信号。

线程与进程

  • 进程的定义? 是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。
  • 线程的定义? 线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。 在运行时,只是暂用一些计数器、寄存器和栈 。
  • 关系? 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。资源分配给进程,同一进程的所有线程共享该进程的所有资源。线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。处理机分给线程,即真正在处理机上运行的是线程。线程是指进程内的一个执行单元,也是进程内的可调度实体。
  • 区别? 调度:线程作为CPU调度和分配的基本单位,进程作为拥有资源的基本单位。并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清欢_小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值