备战面试之Linux操作系统

1、讲一讲什么是操作系统

现代计算机的工作过程就是通过程序控制硬件执行任务,由于计算机系统组成复杂,使得直接面向应硬件开发非常困难,操作系统的目的就是为了隐藏直接操作硬件的细节,并向应用程序提供抽象的接口,方便应用程序开发和运行。因此一个优秀的操作系统应该具有优秀的资源管理能力,以及对计算机细节的抽象能力。

2、讲一讲Linux系统中的进程和线程

什么是进程

一个进程就是计算机正在执行的一项任务,他包括任务的执行流程以及所调度的资源。

多进程

Linux是支持多进程的,也就是一段时间内有多个进程同时运行,这里强调的是同一段时间内,其实Linux操作系统是模拟多个进程同时进行的,因为一个CPU在同一时间只能执行一个任务,在Linux系统中,被执行的任务在多个进程中快速切换,就可以实现在一段时间内同时进行多个任务。
那么为什么要使用多进程呢,其实是为了提升CPU的利用率,因为如果只执行一个进程,对CPU的性能是极大的浪费,尤其是当进程等待IO相应的时候,这时候CPU在空转,没有指令执行,如果此时能够调度CPU转去执行另外一个进程,那性能就不会浪费了,因此要使用多进程。

什么是线程

线程和进程没有太大的区别,如果说进程是CPU正在执行的一项任务,那么线程就是进程中的一个局部任务,从内存空间的角度讲,进程与进程之间是隔离的,不共享内存,而一个进程内的多个线程共享该进程的内存空间,这也是进程和线程的一个区别。在Linux中,线程就是一种特殊的进程,他们都是用进程描述符task_sturct表示的,不同的是线程的内存空间直接指向它所属进程,而进程的内存空间是创建的时候开辟的一块新的内存空间。线程才是任务调度的最小单元。

多线程会出现什么问题

一般来说,为了提高效率,一个进程可能有多个线程,由于多个线程能够共享同一块内存空间,那就不可避免的出现线程安全问题,也就是多个线程都试图去修改同一块内存的时候,结果将是不可预测的,可以通过线程同步解决这个问题,俗称加锁,但是相应的如果锁顺序安排的不合理,可能会出现死锁的情况,当两个线程去争夺两个对象锁,各自拿到了不同的锁,并且试图去获取对方手里的锁,这时候就会陷入无限等待,如果不加干预,两个线程将永远保持等待无法运行,我认为解决死锁最好的方式就是合理安排锁顺序,避免死锁发生。

线程调度

刚刚说了,在多线程模型中,CPU在多个线程之间快速切换,那么如何保证CPU切换回线程之后,能够保持之前的运行状态,以及如何保证每个线程都能公平的被CPU执行,是系统设计应该考虑的两个问题,在Linux系统中,系统给每个进程的描述符添加一个进程上下文属性,用来记录该进程当前的运行环境,当CPU切换回来的时候,就是用这个进程上下文来恢复线程的运行状态。如何调度线程....

3、讲一讲Linux中的内存模型

  • 虚拟内存:一个程序在运行之前,需要被加载到内存中,由Linux的进程和线程模型我们知道,多个进程之间应该独立运行,互不干扰,要实现这一点就需要对每个进程的内存地址进行隔离,在此Linux提出了虚拟内存模型,也就是说,用户进程可以访问的内存地址并不是实际的物理地址,而是一块虚拟内存地址,这么做有两个好处,一来是程序开发人员只需要操作虚拟的地址空间,虚拟地址和实际物理地址的映射由操作系统完成,大大简化了开发难度,二来因为每个进程有自己的虚拟内存,所以各个进程就被隔离了。

  • 内存映射:....

4、讲一讲

  • 什么是多进程:所谓多进程就是在一段时间内,多个进程同时运行,
  • 为什么要使用多进程
  • 如何描述一个进程:描述一个进程的描述符需要包含它所使用的内存空间,文件系统,也就是计算机上的资源,除此之外在Linux系统中,为了将一个进程与另一个进程区分开,每个进程还需要包含进程标识,为了使操作系统能够在多个进程之间切换,每个进程的描述符中还需要包含它的运行时状态,也叫做进程上下文。
  • Linux中的进程模型:在Linux系统中,一个进程分为用户态和内核态,这两种状态的区别也很简单,进程执行过程中有些操作需要有内核完成,比如分配内存,访问磁盘,进程调度等,执行这些操作的代码就运行在内核态,其他的程序就运行在用户态,一般来说用户态的代码访问权限较低,执行的操作不会对计算机产生严重的影响,当需要访问操作硬件的时候,就需要进入内核状态,让更加稳定的内核去执行任务。
    由于Linux是支持多进程的,为了保证各个进程在执行的过程中保持独立,互不干扰,就需要保证进程的使用的内存地址不能重叠,为了实现这一点,Linux提出了虚拟内存模型,用户线程只能访问虚拟内存而不能直接访问物理内存,这样做的好处是,用户不必担心内存地址重叠问题,在32二位的操作系统中,每个进程都被分配4G的虚拟内存,其中3G的内存是用户空间的,1G是内核空间的,虚拟内存被映射到物理内存中,并且保证每个进程用户空间内存,映射到物理内存中没有地址重叠,这样就把进程与进程隔离开了。
全部评论

相关推荐

评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务