1 什么是操作系统?请简要概述一下

  • 操作系统是管理计算机硬件和软件资源的计算机程序,提供一个计算机用户与计算机硬件系统之间的接口。
  • 向上对用户程序提供接口,向下接管硬件资源。
  • 操作系统本质上也是一个软件,作为最接近硬件的系统软件,负责处理器管理、存储器管理、设备管理、文件管理和提供用户接口。

2 操作系统有哪些分类?

  • 操作系统常规可分为批处理操作系统、分时操作系统、实时操作系统。
  • 若一个操作系统兼顾批操作和分时的功能,则称该系统为通用操作系统。(通用操作系统 = 批处理操作系统 + 分时操作系统)
  • 常见的通用操作系统有:Windows、Linux、MacOS等。

3 什么是内核态和用户态?

  • 为了避免操作系统和关键数据被用户程序破坏,将处理器的执行状态分为内核态和用户态。
  • 内核态是操作系统管理程序执行时所处的状态,能够执行包含特权指令在内的一切指令,能够访问系统内所有的存储空间。
  • 用户态是用户程序执行时处理器所处的状态,不能执行特权指令,只能访问用户地址空间。
  • 用户程序运行在用户态,操作系统内核运行在内核态。

4 如何实现内核态和用户态的切换?

处理器从用户态切换到内核态的方法有三种:系统调用、异常和外部中断。
  • 1. 系统调用是操作系统的最小功能单位,是操作系统提供的用户接口,系统调用本身是一种软中断
  • 2. 异常,也叫做内中断,是由错误引起的,如文件损坏、缺页故障等。
  • 3. 外部中断,是通过两根信号线来通知处理器外设的状态变化,是硬中断

5 并发和并行的区别

  • 1. 并发(concurrency):指宏观上看起来两个程序在同时运行,比如说在单核cpu上的多任务。但从微观上看两个程序的指令是交织着运行的,指令之间交错执行,在单个周期内只运行了一个指令。这种并发并不能提高计算机的性能,只能提高效率(如降低某个进程的相应时间)。
  • 2. 并行(parallelism):指严格物理意义上的同时运行,比如多核cpu,两个程序分别运行在两个核上,两者之间互不影响,单个周期内每个程序都运行了自己的指令,也就是运行了两条指令。这样说来并行的确提高了计算机的效率。所以现在的cpu都是往多核方面发展。

6 什么是进程?

进程是操作系统中最重要的抽象概念之一,是资源分配的基本单位,是独立运行的基本单位。
进程的经典定义就是一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文(context)中。 上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
进程一般由以下的部分组成:
  • 1. 进程控制块PCB,是进程存在的唯一标志,包含进程标识符PID,进程当前状态,程序和数据地址,进程优先级、CPU现场保护区(用于进程切换),占有的资源清单等。
  • 2. 程序段
  • 3. 数据段

7 进程的基本操作

以Unix系统举例:
  • 1. 进程的创建:fork()。新创建的子进程几乎但不完全与父进程相同。子进程得到与父进程用户级虚拟地址空间相同的(但是独立的)一份副本,包括代码和数据段、堆、共享库以及用户栈。子进程还获得与父进程任何打开文件描述符相同的副本,这就意味着当父进程调用 fork 时,子进程可以读写父进程中打开的任何文件。父进程和新创建的子进程之间最大的区别在于它们有不同的 PID。fork函数是有趣的(也常常令人迷惑), 因为它只被调用一次,却会返回两次:一次是在调用进程(父进程)中,一次是在新创建的子进程中。在父进程中,fork 返回子进程的 PID。在子进程中,fork 返回 0。因为子进程的 PID 总是为非零,返回值就提供一个明确的方法来分辨程序是在父进程还是在子进程中执行。
  • pid_t fork(void);
  • 2. 回收子进程:当一个进程由于某种原因终止时,内核并不是立即把它从系统中清除。相反,进程被保持在一种已终止的状态中,直到被它的父进程回收(reaped)。当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进程。一个进程可以通过调用 waitpid 函数来等待它的子进程终止或者停止。
  • pid_t waitpid(pid_t pid, int *statusp, int options);
  • 3. 加载并运行程序:execve 函数在当前进程的上下文中加载并运行一个新程序。
  • int execve(const char *filename, const char *argv[], const char *envp[]);
  • 4. 进程终止:
  • void exit(int status);

8 简述进程间通信方法

  • 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信
  • 不同进程间的通信本质:进程之间可以看到一份公共资源;而提供这份资源的形式或者提供者不同,造成了通信方式不同。
  • 进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。

9 进程如何通过管道进行通信

管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:
  • 1. 其本质是一个伪文件(实为内核缓冲区)
  • 2. 由两个文件描述符引用,一个表示读端,一个表示写端。
  • 3. 规定数据从管道的写端流入管道,从读端流出。
管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区实现。

管道的局限性:

  • 1. 数据自己读不能自己写。
  • 2. 数据一旦被读走,便不在管道中存在,不可反复读取。
  • 3. 由于管道采用半双工通信方式。因此,数据只能在一个方向上流动。
  • 4. 只能在有公共祖先的进程间使用管道。

10 进程如何通过共享内存通信

它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
特点:
  • 1. 共享内存是最快的一种IPC,因为进程是直接对内存进行操作来实现通信,避免了数据在用户空间和内核空间来回拷贝。
  • 2. 因为多个进程可以同时操作,所以需要进行同步处理。
  • 3. 信号量和共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。

11 什么是信号

一个信号就是一条小消息,它通知进程系统中发生了一个某种类型的事件。 Linux 系统上支持的30 种不同类型的信号。 每种信号类型都对应于某种系统事件。低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。
  • 1. 发送信号:内核通过更新目的进程上下文中的某个状态,发送(递送)一个信号给目的进程。发送信号可以有如下两种原因:

    • 内核检测到一个系统事件,比如除零错误或者子进程终止。
    • —个进程调用了kill 函数, 显式地要求内核发送一个信号给目的进程。一个进程可以发送信号给它自己。
  • 2. 接收信号:当目的进程被内核强迫以某种方式对信号的发送做出反应时,它就接收了信号。进程可以忽略这个信号,终止或者通过执行一个称为信号处理程序(signal handler)的用户层函数捕获这个信号。

12 如何编写正确且安全的信号处理函数

  • 1. 处理程序要尽可能简单。 避免麻烦的最好方法是保持处理程序尽可能小和简单。例如,处理程序可能只是简单地设置全局标志并立即返回;所有与接收信号相关的处理都由主程序执行,它周期性地检查(并重置)这个标志。
  • 2. 在处理程序中只调用异步信号安全的函数。 所谓异步信号安全的函数(或简称安全的函数)能够被信号处理程序安全地调用,原因有二:要么它是可重入的(例如只访问局部变量),要么它不能被信号处理程序中断。
  • 3. 保存和恢复errno 许多Linux 异步信号安全的函数都会在出错返回时设置errno在处理程序中调用这样的函数可能会干扰主程序中其他依赖于分。解决方法是在进人处理程序时把errno 保存在一个局部变量中,在处理程序返回前恢复它。注意,只有在处理程序要返回时才有此必要。如果处理程序调用_exit终止该进程,那么就不需要这样做了。
  • 4. 阻塞所有的信号,保护对共享全局数据结构的访问。 如果处理程序和主程序或其他处理程序共享一个全局数据结构,那么在访问(读或者写)该数据结构时,你的处理程序和主程序应该暂时阻塞所有的信号。这条规则的原因是从主程序访问一个数据结构d 通常需要一系列的指令,如果指令序列被访问d 的处理程序中断,那么处理程序可能会发现d 的状态不一致,得到不可预知的结果。在访问d时暂时阻塞信号保证了处理程序不会中断该指令序列。
  • 5. 用volatile 声明全局变量。 考虑一个处理程序和一个main 函数,它们共享一个全局变量g 。处理程序更新g,main 周期性地读g, 对于一个优化编译器而言,main 中g的值看上去从来没有变化过,因此使用缓存在寄存器中g 的副本来满足对g 的每次引用是很安全的。如果这样,main 函数可能永远都无法看到处理程序更新过的值。可以用volatile 类型限定符来定义一个变量,告诉编译器不要缓存这个变量。例如:volatile 限定符强迫编译器毎次在代码中引用g时,都要从内存中读取g的值。一般来说,和其他所有共享数据结构一样,应该暂时阻塞信号,保护每次对全局变量的访问。 volatile int g;
  • 6. 用sig_atomic_t声明标志。在常见的处理程序设计中,处理程序会写全局标志来记录收到了信号。主程序周期性地读这个标志,响应信号,再清除该标志。对于通过这种方式来共享的标志,C 提供一种整型数据类型sig_atomic_t对它的读和写保证会是原子的(不可中断的)。
  • 7. 信号的一个与直觉不符的方面是未处理的信号是不排队的。因为 pending 位向量中每种类型的信号只对应有一位,所以每种类型最多只能有一个未处理的信号。关键思想是如果存在一个未处理的信号就表明至少有一个信号到达了。

13 进程调度的时机

  • 1. 当前运行的进程运行结束。
  • 2. 当前运行的进程由于某种原因阻塞。
  • 3. 执行完系统调用等系统程序后返回用户进程。
  • 4. 在使用抢占调度的系统中,具有更高优先级的进程就绪时。
  • 5. 分时系统中,分给当前进程的时间片用完。

14 不能进行进程调度的情况

  • 1. 在中断处理程序执行时。
  • 2. 在操作系统的内核程序临界区内。
  • 3. 其它需要完全屏蔽中断的原子操作过程中。

15 进程的调度策略(算法)

  • 1. 先到先服务调度算法:先到的进程先执行
  • 2. 短作业优先调度算法:根据进程执行时间短的优先执行
  • 3. 优先级调度算法:根据进程优先级高的先执行
  • 4. 时间片轮转调度算法:给进程分配执行时间,用完则切换进程执行
  • 5. 高响应比优先调度算法:是等待时间与要求服务时间的比值,为先到先服务与短作业优先的结合。
  • 6. 多级队列调度算法:该算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。
  • 7. 多级反馈队列调度算法:也按时间片轮转算法执行任务,设置n个队列,当第一个队列任务为空,才执行第二个队列,依次类推。如果在i队列的任务在该时间片执行后没有完成,即插入i+1号队列。

16 进程调度策略的基本设计指标

  • 1. CPU利用率。
  • 2. 系统吞吐率:即单位时间内CPU完成的作业的数量。
  • 3. 响应时间。
  • 4. 周转时间:是指作业从提交到完成的时间间隔。从每个作业的角度看,完成每个作业的时间也是很关键:
    • 平均周转时间
    • 带权周转时间
    • 平均带权周转时间

17 进程的状态与状态转换

进程在运行时有三种基本状态:就绪态、运行态和阻塞态。
  • 1. 运行(running)态:进程占有处理器正在运行的状态。进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态; 在多处理机系统中,则有多个进程处于执行状态。
  • 2.就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行的状态。 当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
  • 3.阻塞(wait)态:又称等待态或睡眠态,指进程不具备运行条件,正在等待某个时间完成的状态。
各状态之间的转换:
  • 1. 就绪→执行:处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
  • 2. 执行→就绪:处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。
  • 3. 执行→阻塞:正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
  • 4. 阻塞→就绪:处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

18 什么是孤儿进程?僵尸进程?

  • 1. 孤儿进程: 父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被init进程(1号进程)所收养,并由init进程对他们完成状态收集工作。
  • 2. 僵尸进程(僵死进程): 进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait 获waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中的这些进程是僵尸进程。

19 什么是线程

  • 1. 是进程划分的任务,是一个进程内可调度的实体,是CPU调度的基本单位,用于保证程序的实时性,实现进程内部的并发。
  • 2. 线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。
  • 3. 每个线程完成不同的任务,但是属于同一个进程的不同线程之间共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等),打开的文件队列和其他内核资源。

20 为什么需要线程

线程产生的原因:进程可以使多个程序能并发执行,以提高资源的利用率和系统的吞吐量;但是其具有一些缺点:
  • 1. 进程在同一时刻只能做一个任务,很多时候不能充分利用CPU资源。
  • 2. 进程在执行的过程中如果发生阻塞,整个进程就会挂起,即使进程中其它任务不依赖于等待的资源,进程仍会被阻塞。
引入线程就是为了解决以上进程的不足,线程具有以下的优点:
  • 1. 从资源上来讲,开辟一个线程所需要的资源要远小于一个进程。
  • 2. 从切换效率上来讲,运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需时间也远远小于进程间切换所需要的时间(这种时间的差异主要由于缓存的大量未命中导致)。
  • 3. 从通信机制上来讲,线程间方便的通信机制。对不同进程来说,它们具有独立的地址空间,要进行数据的传递只能通过进程间通信的方式进行。线程则不然,属于同一个进程的不同线程之间共享同一地址空间,所以一个线程的数据可以被其它线程感知,线程间可以直接读写进程数据段(如全局变量)来进行通信(需要一些同步措施)。

21 简述线程和进程的区别和联系

  • 1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。
  • 2. 进程在执行过程中拥有独立的地址空间,而多个线程共享进程的地址空间。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)
  • 3. 进程是资源分配的最小单位,线程是CPU调度的最小单位。
  • 4. 通信:由于同一进程中的多个线程具有相同的地址空间,使它们之间的同步和通信的实现,也变得比较容易。进程间通信 IPC ,线程间可以直接读写进程数据段(如全局变量)来进行通信(需要一些同步方法,以保证数据的一致性)。
  • 5. 进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂。
  • 6. 进程间不会相互影响;一个进程内某个线程挂掉将导致整个进程挂掉。
  • 7. 进程适应于多核、多机分布;线程适用于多核。

22 进程和线程的基本API

23 多线程模型

  • 1. 多对一模型:将多个用户级线程映射到一个内核级线程上。该模型下,线程在用户空间进行管理,效率较高。缺点就是一个线程阻塞,整个进程内的所有线程都会阻塞。几乎没有系统继续使用这个模型。
  • 2. 一对一模型:将内核线程与用户线程一一对应。优点是一个线程阻塞时,不会影响到其它线程的执行。该模型具有更好的并发性。缺点是内核线程数量一般有上限,会限制用户线程的数量。更多的内核线程数目也给线程切换带来额外的负担。linux和Windows操作系统家族都是使用一对一模型。
  • 3. 多对多模型:将多个用户级线程映射到多个内核级线程上。结合了多对一模型和一对一模型的特点。

24 进程同步的方法

操作系统中,进程是具有不同的地址空间的,两个进程是不能感知到对方的存在的。有时候,需要多个进程来协同完成一些任务。当多个进程需要对同一个内核资源进行操作时,这些进程便是竞争的关系,操作系统必须协调各个进程对资源的占用,进程的互斥是解决进程间竞争关系的方法。 进程互斥指若干个进程要使用同一共享资源时,任何时刻最多允许一个进程去使用,其他要使用该资源的进程必须等待,直到占有资源的进程释放该资源。当多个进程协同完成一些任务时,不同进程的执行进度不一致,这便产生了进程的同步问题。需要操作系统干预,在特定的同步点对所有进程进行同步,这种协作进程之间相互等待对方消息或信号的协调关系称为进程同步。进程互斥本质上也是一种进程同步。
进程的同步方法:
  • 1. 互斥锁
  • 2. 读写锁
  • 3. 条件变量
  • 4. 记录锁(record locking)
  • 5. 信号量
  • 6. 屏障(barrier)

25 线程同步的方法

操作系统中,属于同一进程的线程之间具有相同的地址空间,线程之间共享数据变得简单高效。遇到竞争的线程同时修改同一数据或是协作的线程设置同步点的问题时,需要使用一些线程同步的方法来解决这些问题。
线程同步的方法:
  • 1. 互斥锁:如果资源已经被占用,资源申请者只能进入睡眠状态。
  • 2. 读写锁
  • 3. 条件变量
  • 4. 信号量
  • 5. 自旋锁:当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。
  • 6. 屏障(barrier)

26 进程同步与线程同步有什么区别

进程之间地址空间不同,不能感知对方的存在,同步时需要将锁放在多进程共享的空间。而线程之间共享同一地址空间,同步时把锁放在所属的同一进程空间即可。

27 死锁是怎样产生的?

死锁是指两个或两个以上进程在执行过程中,因争夺资源而造成的相互等待的现象。
产生死锁需要满足下面四个条件:
  • 1. 互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源。
  • 2. 占有并等待条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但该进程不会释放自己已经占有的资源。
  • 3. 非抢占条件:进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用后自己释放。
  • 4. 循环等待条件:进程发生死锁后,必然存在一个进程-资源之间的环形链。

28 如何解决死锁问题

解决死锁的方法即破坏产生死锁的四个必要条件之一,主要方法如下:
  • 1. 资源一次性分配,这样就不会再有请求了(破坏请求条件)。
  • 2. 只要有一个资源得不到分配,也不给这个进程分配其他的资源(破坏占有并等待条件)。
  • 3. 可抢占资源:即当进程新的资源未得到满足时,释放已占有的资源,从而破坏不可抢占的条件。
  • 4. 资源有序分配法:系统给每类资源赋予一个序号,每个进程按编号递增的请求资源,释放则相反,从而破坏环路等待的条件。

29 什么是虚拟地址,什么是物理地址

地址空间是一个非负整数地址的有序集合。
  • 在一个带虚拟内存的系统中,CPU 从一个有N=pow(2,n)个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间(virtual address space),现代系统通常支持 32 位或者 64 位虚拟地址空间。
  • 一个系统还有一个物理地址空间(physical address space),对应于系统中物理内存的M 个字节。
  • 地址空间的概念是很重要的,因为它清楚地区分了数据对象(字节)和它们的属性(地址)。 一旦认识到了这种区别,那么我们就可以将其推广,允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。这就是虚拟内存的基本思想。
  • 主存中的每字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

30 什么是虚拟内存

为了更加有效地管理内存并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟内存(VM)。虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的一致的私有的地址空间。通过一个很清晰的机制,虚拟内存提供了三个重要的能力:
  • 1. 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
  • 2. 它为每个进程提供了一致的地址空间,从而简化了内存管理。
  • 3. 它保护了每个进程的地址空间不被其他进程破坏。

31 为什么要引入虚拟内存

当一个可执行文件被加载到内存时,就成为了一个可执行的程序,也就是一个进程。在DOS时期,进程直接使用物理内存,使用实地址,这样的话,一个进程可能会操作到另一个进程的内存空间,甚至覆盖操作系统的内存。所以,引入了一种保护模式,也就是虚拟内存机制。进程不使用物理内存地址,而使用虚拟内存地址,然后操作系统将虚拟内存地址映射到物理内存地址。
  • 不同进程的相同虚拟内存地址映射不同的物理内存地址,实现内存隔离
  • 不同进程的不同虚拟内存地址映射相同的物理内存地址,实现内存共享

32 请说一下什么是写时复制

  • 如果有多个进程要读取它们自己的那部门资源的副本,那么复制是不必要的。每个进程只要保存一个指向这个资源的指针就可以了。只要没有进程要去修改自己的“副本”,就存在着这样的幻觉:每个进程好像独占那个资源。从而就避免了复制带来的负担。如果一个进程要修改自己的那份资源“副 本”,那么就会复制那份资源,并把复制的那份提供给进程。不过其中的复制对进程来说是透明的。 这个进程就可以修改复制后的资源了,同时其他的进程仍然共享那份没有修改过的资源。所以这就是名称的由来:在写入时进行复制。
  • 写时复制的主要好处在于:如果进程从来就不需要修改资源,则不需要进行复制。惰性算法的好处就在于它们尽量推迟代价高昂的操作,直到必要的时刻才会去执行。
  • 在使用虚拟内存的情况下,写时复制(Copy-On-Write)是以页为基础进行的。所以,只要进程不修改它全部的地址空间,那么就不必复制整个地址空间。在fork()调用结束后,父进程和子进程都相信它们有一个自己的地址空间,但实际上它们共享父进程的原始页,接下来这些页又可以被其他的父进程或子进程共享。

33 实时操作系统的概念

实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。 实时操作系统与一般的操作系统相比,最大的特色就是 “实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。

34 优先级反转是什么?如何解决

  • 由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。
  • 其实,优先级反转是在高优级(假设为A)的任务要访问一个被低优先级任务(假设为C)占有的资源时,被阻塞。而此时又有优先级高于占有资源的任务(C)而低于被阻塞的任务(A)的优先级的任务(假设为B)时,于是,占有资源的任务就被挂起(占有的资源仍为它占有),因为占有资源的任务优先级很低,所以,它可能一直被另外的任务挂起。而它占有的资源也就一直不能释放,这样,引起任务A一直没办法执行。而比它优先低的任务却可以执行。
目前解决优先级反转有许多种方法。其中普遍使用的有2种方法:一种被称作优先级继承(priority
inheritance);另一种被称作优先级极限(priority ceilings)。
  • 1. 优先级继承(priority inheritance) 优先级继承是指将低优先级任务的优先级提升到等待它所占有的资源的最高优先级任务的优先级。当高优先级任务由于等待资源而被阻塞时,此时资源的拥有者的优先级将会自动被提升。
  • 2. 优先级天花板(priority ceilings)优先级天花板是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级。(这个优先级称为该资源的优先级天花板)。

35 简述 select

select是一种多路复用技术。其收到所有输入的文件描述符,返回哪些文件有新数据。其可以设置为阻塞或者非阻塞状态,底层采用1024位bitmap做实现,因此有文件描述符上限数。

36 简述poll

poll是一种多路复用技术。其收到所有输入的文件描述符,返回哪些文件有新数据。其通过链表代替了之前select的数据结构,使得其没有上限限制。

37 简述epoll

epoll是一种多路复用技术。其采用一个文件描述符管理多个输入的文件描述符,采用事件回调的方式,提高了程序运行效率。

38 简述虚拟地址到物理地址转化过程

虚拟地址由虚拟页号和页偏移两部分组成。
通过虚拟地址的页面号,首先在快表中查询是否有该映射,查询不成功,在页表中找到该页对应的物理地址。 然后通过页物理地址+页偏移,得到真实的物理地址。

39 简述页表

页表用于存储虚拟地址中的虚拟页面号和物理页面号的映射关系。
除此之外,有些页的读写有限制,页表也通过其他存储位,标记该页访问位,是否在内存中(可能被页面置换出去了)等等。

40 简述多级页表

多级页表用于减少内存的占用。以二级页表为例,虚拟地址被分为DIR,PAGE和offset三部分,通过顶级页表和DIR,寻找到该二级页表的起始位置,再通过二级页表的起始位置和PAGE,找到页物理地址,最后加上页偏移,即可得到最终的物理地址。

41 简述快表

快表也称为页表高速缓存。其会存储一定数量的页表项,以此加快虚拟地址到物理地址的映射速度。

42 简述MMU

MMU即内存管理单元,该硬件负责处理虚拟地址到物理地址的转化工作。快表也存储在MMU上。

43 UnixLinux有什么区别

  • 1. 开源性:Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
  • 2. 跨平台性:Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系 统跨平台性能较弱,大多需与硬件配套使用。
  • 3. 可视化界面:Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
  • 4. 硬件环境:Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛 刻,按照难度较大。
  • 5. 用户群体:Linux的用户群体很广泛,个人和企业均可使用;Unix的用户群体比较窄,多是 安全性要求高的大型企业使用,如银行、电信部门等,或者Unix硬件厂商使用,如Sun等。

44 什么是 Linux 内核

Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
  • 系统内存管理
  • 应用程序管理
  • 硬件设备管理
  • 文件系统管理

45 Linux的基本组件是什么

Linux拥有组件:内核shell GUI系统实用程序应用程序

46 什么是交换空间

交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM 没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。

47 什么是CLI?什么是GUI

  • 命令行界面(英语command-line interface,缩写]:CLI)是在图形用户界面得到普及之前使用为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。较图形用户界面节约计算机系统的资源。
  • 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。

48 什么是 inode

  • 文件数据都储存在"块"中,文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等存储在inode中。
  • 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候是一次性连续读取多个扇区,即一次性读取一个"块"(block)。“块”是文件存取的 小单位。"块"的大小, 常见的是4KB,即连续八个 sector组成一个 block。

49 什么是硬链接和软链接

硬链接:硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个硬链接,文件的链接数就加 1 。
不足:
  • 1 . 不可以在不同文件系统的文件间建立链接;
  • 2 . 只有超级用户才可以为目录创建硬链接。
软链接:没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
不足:
  • 1 . 因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了。
  • 2 . 它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
区别:

  • 硬链接不可以跨分区,软件链可以跨分区。
  • 硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。
  • 删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。

50 RAID 是什么

RAID 全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。

51 什么叫 CC 攻击?什么叫 DDOS 攻击?

攻击,即是通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。
  • CC 攻击:主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽。
  • DDOS 攻击:中文名叫分布式拒绝服务攻击,指借助服务器技术将多个计算机联合起来作为攻击平台,来对一个或多个目标发动 DDOS 攻击。
预防:怎么预防 CC 攻击和 DDOS 攻击?防 CC、DDOS 攻击,这些只能是用硬件防火墙做流量清洗,将攻击流量引入黑洞。流量清洗这一块,主要是买 ISP 服务商的防攻击的服务就可以,机房一般有空余流量,我们一般是买服务,毕竟攻击不会是持续长时间。

52 什么是网站数据库注入

  • 由于程序员的水平及经验参差不齐,大部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断。应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL 注入
  • SQL注入:是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,如果管理员没查看日志的习惯,可能被入侵很长时间都不会发觉。

53 如何规划一台 Linux 主机,步骤是怎样

  • 1、确定机器是做什么用的,比如是做 WEB 、DB、还是游戏服务器。不同的用途,机器的配置会有所不同。
  • 2、确定好之后,就要定系统需要怎么安装,默认安装哪些系统、分区怎么做。
  • 3、需要优化系统的哪些参数,需要创建哪些用户等等的。

54 有哪些方面的因素会导致网站网站访问慢

  • 1、服务器出口带宽不够用

    • 本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。
    • 跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。
  • 2、服务器负载过大,导致响应不过来
    • 分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,MEM 等占用情况,要么是 CPU 繁忙,要么是内存不够。
    • 如果这二者都正常,再去使用 sar 命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。
  • 3、数据库瓶颈
    • 如果慢查询比较多。那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
    • 如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等。然后,也可以搭建 MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。
  • 4、网站开发代码没有优化好
    • 例如 SQL 语句没有优化,导致数据库读写相当耗时。

55 针对网站访问慢,怎么去排查

  • 1、首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题。不要上来就看服务端的问题。一定要从源头开始,逐步逐步往下。
  • 2、如果访问也慢,那么可以利用浏览器的调试功能,看看加载那一项数据消耗时间过多,是图片加载慢,还是某些数据加载慢。
  • 3、针对服务器负载情况。查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如 CPU、内存、带宽的使用情况。
  • 4、如果发现硬件资源消耗都不高,那么就需要通过查日志,比如看看 MySQL慢查询的日志,看看是不是某条 SQL 语句查询慢,导致网站访问慢。怎么去解决?

56 Linux 性能调优都有哪几种方法

  • 1、Disabling daemons (关闭 daemons)。
  • 2、Shutting down the GUI (关闭 GUI)。
  • 3、Changing kernel parameters (改变内核参数)。
  • 4、Kernel parameters (内核参数)。
  • 5、Tuning the processor subsystem (处理器子系统调优)。
  • 6、Tuning the memory subsystem (内存子系统调优)。
  • 7、Tuning the file system (文件系统子系统调优)。
  • 8、Tuning the network subsystem(网络子系统调优)。

57 Linux 常见操作命令

cat 命令

用于连接文件并打印到标准输出设备上,主要有三大功能:
  • 1.一次显示整个文件: cat filename
  • 2.从键盘创建一个文件:cat > filename
  • 3.将几个文件合并为一个文件: cat file1 file2 > file

chmod 命令

  • Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。
  • 利用 chmod 可以控制文件如何被他人所调用。
  • 该命令有两种用法:

    • 1 . 一种是包含字母和操作符表达式的文字设定法;
    • 2 . 另一种是包含数字的数字设定法。

cp 命令

  • 将源文件复制至目标文件,或将多个源文件复制至目标目录。
  • 命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!

find 命令

用于在文件树中查找文件,并作出相应的处理。

head 命令

head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。

more 命令

功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。

less 命令

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

ln 命令

为文件在另外一个位置建立一个同步的链接,当在不同目录需要该问题时,就不需要为每一个目录创建同样的文件,通过 ln 创建的链接(link)减少磁盘占用量。

locate 命令

通过搜寻系统内建文档数据库达到快速找到档案。

mv 命令

移动文件或修改文件名。
根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。 当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

rm 命令

删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

tail 命令

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

touch 命令

令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

vim 命令

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。

which 命令

在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。

wc 命令

wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出命令格式。

cd 命令

切换目录。

df 命令

显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。

du 命令

du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看。

ls命令

就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限) 查看目录信息等等。

mkdir 命令

mkdir 命令用于创建文件夹。

pwd 命令

pwd 命令用于查看当前工作目录路径。

rmdir 命令

从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

ifconfig 命令

查看和配置 Linux 系统的网络接口。查看所有网络接口及其状态:ifconfig -a 。

netstat 命令

netstat命令用于显示网络状态

ping 命令

Linux ping命令用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

telnet 命令

Linux telnet命令用于远端登入。执行telnet指令开启终端机阶段作业,并登入远端主机。

date 命令

显示或设定系统的日期与时间。

free 命令

显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。

kill 命令

发送指定的信号到相应进程。

ps 命令

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top。
rpm 命令
Linux rpm 命令用于管理套件。
top 命令
显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等。

yum 命令

能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

tar 命令

用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。

vmstal 命令

查看CPU、内存负载情况。

计算机基础-操作系统相关推荐

  1. 计算机基础——操作系统

    作者简介:一名云计算网络运维人员.每天分享网络与运维的技术与干货.   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.操作系统 1.操作系统简介 2.操作系统的主要功 ...

  2. 计算机基础——操作系统篇概览

    操作系统 1.os基础 操作系统基本概念:运行在计算机上的一种程序,管理计算机上的软件和硬件资源,包括进程,内存管理,硬件设备管理等(内核负责). 系统调用:运行在用户态的程序需要调用系统态下的资源, ...

  3. 计算机基础------操作系统

    一.什么是操作系统 1)管理计算机软件和硬件资源的程序,是计算机的基石 2)本质是运行在计算机上的应用程序,运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件. 3)操作系统屏蔽 ...

  4. 计算机基础--操作系统基础

    学习目标: 操作系统基础 学习背景: 针对面试,对自己以往学习过的操作系统基础知识做一个记录与梳理. 学习内容: 1. 进程与线程的本质区别.以及各自的使用场景. 2. 五种进程状态之间的转换. 3. ...

  5. 快速过一遍计算机基础--操作系统—4.文件管理

    目录 Part 1:文件的逻辑结构 Part 2:文件目录 一.实现文件目录的关键数据结构----文件控制块FCB 二.目录结构 三.对文件控制块FCB的优化-索引结点 Part 3:文件的物理结构( ...

  6. 计算机基础教案(XP操作系统)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 计算机基础教案 ...

  7. IT:银行类金融科技岗笔试习题集合—各大行(工商+建设+农业+浦发+招商+平安+人民+邮政银行)计算机信息科技岗笔试集合(包括计算机基础知识+网络+操作系统+数据库系统原理)

    IT:银行类金融科技岗笔试习题集合-各大行(工商+建设+农业+浦发+招商+平安+人民+邮政银行)计算机信息科技岗笔试集合(包括计算机基础知识+网络+操作系统+数据库系统原理) 导读:因为博主后台留言太 ...

  8. 计算机基础知识-操作系统

    1.2 操作系统 用来操作硬件,了解每一个硬件的作用并熟知其物理特性及使用方法(这是一个极其繁琐.庞大的工作). 桌面很占用系统资源 为什么要有操作系统 一般而言,现代计算机系统是一个复杂的系统.如果 ...

  9. 计算机与操作系统基础小结

    计算机基础概念 1946年二月美国,世界上第一台电子计算机ENIAC诞生,似乎从这一年开始世界便逐渐变得不一样了.随着半个世纪的时间,计算机技术蓬勃发展,推动人类进入信息社会. 计算机操作界面: ①图 ...

  10. 计算机基础和操作系统基础知识测试,计算机基础知识和操作系统.doc

    全国计算机等级考试精讲·精解·精练--二级C 第1章 计算机基础知识与操作系统 · PAGE 2· · PAGE 33· 技术资料 共享知识 第1章计算机基础知识与操作系统 大纲要求 了解计算机的有关 ...

最新文章

  1. 易宝典——玩转O365中的EXO服务 之三十六 为软删除邮箱启用就地保留
  2. WPF中的Attached Property
  3. 转 性能分析工具汇总
  4. 80核处理器_标压版锐龙处理器更香!联想小新Pro 13轻薄笔记本评测
  5. 如何获取UIWebView中全屏播放视频事件
  6. fastjson 序列化时指定json的key值
  7. Cocoa中Core Data的简单介绍
  8. linux 链接第三方库
  9. catia导出bom清单_CATIA VBA 二次开发工具 | 一键导出Bom信息到Excel
  10. 【QUARTUSII】数字电路设计仿真实验
  11. 各大主流社交软件显示ip地址-如何实现ip飘移
  12. 几种经典的下肢力量练习方式
  13. JAVA+MySQL 图书馆借阅信息管理系统
  14. 如何在windows上安装虚拟机
  15. MySQL数据库的数据更新
  16. STM32笔记---USART3配置及收发数据
  17. JLINK与 SWD接口
  18. 超酷!!!成功使用doxygen+Graphviz+HtmlHelp 自动生成函数调用关系图
  19. 【实时数仓】省份交易额统计接口、新老访客对比接口、访客分时统计接口
  20. 深入解析HotSpot

热门文章

  1. android自定义pickerview,开源项目 好用的PickerView库了
  2. 数学建模算法与应用学习day4——综合评价与决策方法
  3. 创建自签名数字证书PFX格式
  4. 一个喜爱电影的人能利用什么工具?
  5. MarkDown模板:接口文档
  6. java web 基础知识 流程图
  7. ubuntu操作系统之新手操作必看篇
  8. python水仙花数判断程序
  9. PS破解版全网下架?这款国产工具可完美替代
  10. JDK 11 API中文帮助文档