进程_线程_管道

1. 简述Linux操作系统内核的作用和解决的问题

  1. Linux操作系统内核主要功能是管理和操纵计算机硬件,对计算机硬件资源进行抽象,隐藏硬件具体参数细节. 为上层应用程序和用户提供一个抽象层次更高, 使用更加简便的交互接口 ---> 系统调用 ---> 系统库 ---> Shell.

2. 进程_线程

【个人简易理解】

举个例子:一台四核电脑,可同时运行多个软件【word,ppt…】,开启的word软件算是一个进程,然后在软件里面进行编辑、同时也在统计字数等操作,就是同一个进程里面多个线程。这多个线程均能访问word中的内容,但是线程之间并没有任何关联。

进程:活的程序,正在运行的程序;【线程的容器】;
线程:可共享进程的内存空间。【可共享进程的堆空间,不共享栈】
程序:死的进程,一个还没有运行的进程。

【操作系统面试题】

  1. 进程和线程的区别?
    解析:
    1.1 进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元
    1.2 同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。
    1.3 进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
    1.4 线程是轻两级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的
    1.5 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
    1.6 线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志

3. 管道

管道pipe:管道是一种半双工的通信方式,数据只能单向流动。管道是一种两个进程间进行单向通信的机制。在Shell中, 使用 "|" 来定义管道来把一个命令的输出通过"管道"传输到另一个程序的输入

  1. 其本质是一个伪文件(实为内核缓冲区)
  2. 由两个文件描述符引用,一个表示读端,一个表示写端。
  3. 规定数据从管道的写端流入管道,从读端流出。

管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。

【个人简易理解】

就是在输出的同时是下一个操作的输入,这个过程就是管道。

例如:

  • Linux中一切皆为文件。
    • 标准输出【读取StdOut】
    • 标准输入【写入StdIn】
    • 标准错误【StdErr】

【个人简易理解】

就是為了操作的一致性。即使是硬件,也可以利用系統調用進行讀寫操作。

从键盘、鼠标输入到显示屏显示的过程,都是一个个文件到输入输出的过程。
例如:鼠标点击事件,鼠标硬件检测到压力,然后发送信号给内核接收,内核读取到信号,发内容发给各个部件【例如显卡】,最终到显示。中间就是输入输出的过程
例如,在cmd输入cat /dev/urandom > /dev/dsp,扬声器就会输出噪音。这就是cmd【系统调用】到硬件的过程。

进程_线程_管道_第1张图片
image.png

【参考】
操作系统面试题

你可能感兴趣的:(进程_线程_管道)