精华内容
参与话题
问答
  • 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统
  • 操作系统面试

    2013-02-21 18:28:08
     2.CPU在上电后,进入操作系统的main()之前必须做什么工作?  3.简述ISO OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。  4.有线电话和无线电话有何区别?无线电话特别需要注意的是什么?  5.软件...

    1.什么是中断?中断发生时CPU做什么工作?
      2.CPU在上电后,进入操作系统的main()之前必须做什么工作?
      3.简述ISO OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。
      4.有线电话和无线电话有何区别?无线电话特别需要注意的是什么?
      5.软件开发五个主要step是什么?
      6.你在开发软件的时候,这5个step分别占用的时间百分比是多少?
      7.makefile文件的作用是什么?
      8.UNIX显示文件夹中,文件名的命令是什么?能使文件内容显示在屏幕的命令是什么?
      9.(选做)手机用户在从一个基站漫游到另一个基站的过程中,都会发生什么?
    你认为操作系统的特点是什么

     

    操作系统进程和线程的区别
    进程间通信
    死锁
    怎么避免死锁
    Transaction的特性
    存储过程的优点
    内存管理

    有关于操作系统的,OOD,OA的。软件工程的。加密算法,内存,指针,模板,尤其还详细问了我的项目情况。我就blabla给他侃了一通。gg不停点头。不过gg蛮厉害的。我说到那里。他就问到相关的那里。后来我就笑了。“你好厉害的。我说到那里你就问到那里的关键呵呵“gg也笑了。后来就问道了网路的7层协议,网络的通讯问题(我项目有小部分相关,所以问得多)数据包,数据报。各层协议。三次握手。等等。
      最后gg问我查找排序什么的,我说还好拉。gg让我写出我所知道的排序,查找。我就呼啦呼啦的写了一堆。gg问我你挑一个写出来。我说“我挑?还是你随便挑吧。我随便写!”


    分段和分页的比较
    INLINE和宏有什么区别

     

    展开全文
  • 操作系统 面试问题Here you will get list of 60+ commonly asked operating system interview questions and answers. These os questions are helpful ... 在这里,您将获得60多个常见的操作系统面试问题和答案的...

    操作系统 面试问题

    Here you will get list of 60+ commonly asked operating system interview questions and answers. These os questions are helpful for freshers as well as experienced.

    在这里,您将获得60多个常见的操作系统面试问题和答案的列表。 这些操作系统问题对于新生和有经验的人都是有帮助的。

    1. What is operating system?

    1.什么是操作系统?

    Operating system can be defined as an interface between user’s program and hardware.

    操作系统可以定义为用户程序和硬件之间的接口。

    2. What is main purpose of operating system?

    2.操作系统的主要目的是什么?

    The main purpose of OS is to manage hardware and software resources and provides common services for our programs. It provides a suitable platform to execute our program (jobs).

    操作系统的主要目的是管理硬件和软件资源,并为我们的程序提供通用服务。 它提供了一个合适的平台来执行我们的程序(工作)。

    3. What are different types of operating system?

    3.什么是不同类型的操作系统?

    There are generally two types of operating system which are as follows:

    通常有两种类型的操作系统,如下所示:

    1. Batch Operating System.

      批处理操作系统。
    2. Multiprogramming Operating System

      多程序操作系统

    Now this Multiprogramming Operating System can be broadly classified as:

    现在,该多程序操作系统可以大致分为:

    •  Multitasking Operating System

      多任务操作系统
    • Multiprocessing Operating System

      多处理操作系统
    • Real Time Operating System

      实时操作系统

    4. What are different components of operating system?

    4.操作系统有哪些不同组件?

    The main components of operating system are:

    操作系统的主要组件是:

    1. Kernel

      核心
    2. Process Management

      流程管理
    3. File System

      文件系统
    4. Memory Management

      内存管理
    5. I/O Management

      I / O管理

    Thus operating system is not an individual component but it has may sub components as stated above which makes our job easier.

    因此,操作系统不是一个单独的组件,而是具有上述子组件的子组件,这使我们的工作更加轻松。

    5. What are the goals of OS?

    5.操作系统的目标是什么?

    Basically there are two goals of Operating System, those are:

    操作系统基本上有两个目标,分别是:

    1. Primary : Convenience

      小学:便利
    2. Secondary : Efficiency

      次要:效率

    6. Explain the different types of Operating System?

    6.解释不同类型的操作系统?

    • Batch Operating System:

      批处理操作系统:

    In this type of Operating System all the jobs are submitted to computer at once and are executed in the order of submission without any preemption (means no job can be taken out until they complete).

    在这种类型的操作系统中,所有作业都立即提交到计算机,并按提交顺序执行而没有任何先占权(意味着在完成之前无法取出任何作业)。

    • Multiprogramming Operating System

      多程序操作系统

    It’s an extension of Batch OS where several jobs would be in the main memory at once and would be executed in some order for some specified amount of time.

    它是批处理OS的扩展,其中几个作业将一次存储在主内存中,并以一定的顺序执行一定的时间。

    Now we will look into its sub types:

    现在,我们将研究其子类型:

    • Multi-tasking Operating System:

      多任务操作系统:

    In this type of Operating System more than one task are executed simultaneously on a single processor machine. In fact there is a switching of CPU among the processes (jobs) at a very sharp pace that it seems to done parallel to the end user.

    在这种类型的操作系统中,一个处理器上同时执行多个任务。 实际上,进程(作业)之间的CPU切换速度非常快,这似乎与最终用户并行。

    • Multiprocessing Operating System:

      多处理操作系统:

    It is the ability of an operating system to execute more than one process simultaneously on a multi-processor machine. In this, a computer uses more than one CPU at a time.

    这是操作系统在多处理器计算机上同时执行多个进程的能力。 在这种情况下,一台计算机一次使用多个CPU。

    • Real Time Operating System:

      实时操作系统:

    In such operating System there is a specified time allotted for each job. It’s useful in critical application like military, satellite etc.

    在这样的操作系统中,为每个作业分配了指定的时间。 在军事,卫星等关键应用中很有用。

    7. What is kernel?

    7.什么是内核?

    Kernel is the core part of the Operating System responsible for managing the communication between the software (user level applications) and the hardware (CPU, disk memory etc.). The main tasks of the kernel are:

    内核是操作系统的核心部分,负责管理软件(用户级应用程序)和硬件(CPU,磁盘内存等)之间的通信。 内核的主要任务是:

    • Process management

      流程管理
    • Device management

      设备管理
    • Memory management

      内存管理
    • Interrupt handling

      中断处理
    • I/O communication

      I / O通讯
    • File system etc.

      文件系统等

    8. What are different types of kernel?

    8.什么是不同类型的内核?

    We have three important types of kernel named:

    我们有三种重要的内核类型:

    • Monolithic Kernel:

      整体内核:

    It can be seen as a whole kernel that is full-fledged kernel, with all the services running.

    可以将其视为一个完整的内核,它是成熟的内核,所有服务都在运行。

    Example: UNIX

    示例:UNIX

    • Micro Kernel:

      微内核:

    It is kernel with a limited services that is with some important services running.

    它是具有有限服务的内核,并且正在运行一些重要服务。

    Example: QNX-real time OS

    示例:QNX实时操作系统

    • Hybrid Kernel:

      混合内核:

    It combines the aspect of both monolithic as well as micro kernel.

    它结合了单片以及微内核的方面。

    Example: Microsoft NT kernel

    示例:Microsoft NT内核

    9. What is user space and kernel space?

    9.什么是用户空间和内核空间?

    These are two important region of a memory.

    这是内存的两个重要区域。

    User space: It is a region of memory where normal user processes run (i.e. everything other than Kernel).

    用户空间:这是运行普通用户进程(即除内核以外的所有进程)的内存区域。

    Kernel space: It is a region of memory where code of kernel resides and executes. It is considered to be privileged part of a memory invoked by system calls. It is also known as System space.

    内核空间:这是内核代码驻留和执行的内存区域。 它被认为是系统调用所调用的内存的特权部分。 也称为系统空间。

    10. What is process?

    10.什么是过程?

    A running program is called as a process or it’s an active instance of program that is under execution.

    一个正在运行的程序称为进程,或者它是正在执行的程序的活动实例。

    A process is an entity created by Operating system to execute the program.

    进程是操作系统创建的用于执行程序的实体。

    In Linux, we can use “ps” command to see running process.

    在Linux中,我们可以使用“ ps”命令查看运行过程。

    Example: Any .exe in windows OS is a process like skype.exe etc

    例如:Windows OS中的任何.exe都是像skype.exe等的进程

    11. What are different type of process?

    11.什么是不同类型的过程?

    There are two types of process that is i) user space process and ii) Kernel space process.

    有两种类型的过程,即i)用户空间过程和ii)内核空间过程。

    12. What is difference between a program and a process?

    12.程序和流程之间有什么区别?

    A program is a set of instructions that are to perform a designated task, whereas the process is an operation which accepts the given instructions and perform the task as per the code, called ‘execution of instructions’.

    程序是一组执行指定任务的指令,而过程是一种接受给定指令并按照称为“指令执行”的代码执行任务的操作。

    Thus a program is a passive entity residing at secondary memory and a process is an active entity residing in the main memory.

    因此,程序是驻留在辅助存储器中的被动实体,而进程是驻留在主存储器中的主动实体。

    13. Explain the different states of a process?

    13.解释流程的不同状态?

    A process can go through following states in its lifecycle:

    流程可以在其生命周期中经历以下状态:

    • New:

      新:

    This is the first state when a process is created or just started. It resides in secondary memory.

    这是创建或刚启动流程时的第一种状态。 它位于辅助内存中。

    • Ready:

      准备:

    This state signifies that the process is ready to be assigned to the processor that is ready to execute.

    此状态表示已准备好将进程分配给准备执行的处理器。

    • Running:

      运行:

    This state signifies that process has been given to the processor and its instruction are getting executed.

    此状态表示已将处理交给处理器,并且其指令正在执行。

    • Waiting:

      等候:

    This state signifies that a process is waiting for some kind of resource or an event be it a user input or waiting for any file to become available.

    此状态表示进程正在等待某种资源或事件,无论是用户输入还是正在等待任何文件可用。

    • Terminated:

      终止:

    The process can be terminated normally or abnormally.

    该过程可以正常或异常终止。

    Normal termination means that process has done with its complete execution whereas abnormal means that process has been terminated without completing its task.

    正常终止表示进程已完成其完整的执行,而异常意味着进程已终止但未完成其任务。

    Note: Any process has to go minimum four states (new->ready->running->terminated).

    注意:任何进程都必须至少进入四个状态(新->就绪->运行->已终止)。

    14. Which is the first process to be created by OS?

    14. OS首先创建哪个进程?

    Init process is the first process to be created by OS. It provides the environment for the other process to be created later.

    初始化过程是OS创建的第一个过程。 它为以后创建其他进程提供了环境。

    15. How are process identified?

    15.如何识别过程?

    Any process can be identified by a term called its id that is process id (pid).

    任何进程都可以通过称为其ID的术语来标识,该术语是进程ID(pid)。

    16. What is fork ()?

    16.什么是fork()?

    Fork is a system call which is responsible for creating a copy of a current process. The current process is termed as parent process and the created process is termed as child process.

    Fork是一个系统调用,负责创建当前进程的副本。 当前进程称为父进程,创建的进程称为子进程。

    On success it returns pid of the child process to parents process and Zero is returned to child process.

    成功后,它将子进程的pid返回父进程,将零返回到子进程。

    17. What is system call?

    17.什么是系统调用?

    It’s like a way by which any user level program ask for the services offered by a kernel.

    这就像任何用户级程序要求内核提供的服务的方式。

    It acts as an interface between a process and the operating system.

    它充当进程和操作系统之间的接口。

    18. What is program counter?

    18.什么是程序计数器?

    It a pointer which points to the next instruction to be executed by a compiler.

    它是指向编译器要执行的下一条指令的指针。

    19. What are the different attributes of a process?

    19.流程的不同属性是什么?

    Some of the important attributes of a process are:

    流程的一些重要属性是:

    • Process id (pid)

      进程ID(PID)
    • Parent process id (PPid)

      父流程编号(PPid)
    • Process state

      Craft.io状态
    • Scheduling parameter

      调度参数
    • Program counter and different registers.

      程序计数器和不同的寄存器。

    This is also referred as context of a process.

    这也称为过程的上下文。

    20. What is Process control Block (PCB)?

    20.什么是过程控制块(PCB)?

    It is like a data structure which hold all information (attributes) of a process.

    就像一个数据结构,它保存进程的所有信息(属性)。

    21. What are different section of a process?

    21.流程的不同部分是什么?

    There is four important section of a process as stated below:

    流程中有四个重要部分,如下所述:

    • Stack: contains local variables ,returns address

      堆栈:包含局部变量,返回地址
    • Heap: Dynamically allocated memory via malloc, calloc,realloc

      堆:通过malloc,calloc,realloc动态分配的内存
    • Data: contains global and the static variables

      数据:包含全局变量和静态变量
    • Code or text: contains code, program counter and content of processor’s register.

      代码或文本:包含代码,程序计数器和处理器寄存器的内容。

    Note:

    注意:

    • Stack and the Heap section are extendible that is stack can grow down and heap can grow up.

      Stack和Heap部分是可扩展的,即堆栈可以向下扩展,而堆栈可以向上扩展。
    • It is in the same order as mentioned above.

      它与上述顺序相同。

    22. What is context switching?

    22.什么是上下文切换?

    It is switching of a processor from one process/thread to another. It is also called Task switch or process switch.

    它是将处理器从一个进程/线程切换到另一个进程/线程。 也称为任务开关或过程开关

    23. What is inode?

    23.什么是inode?

    Inode is a data structure which holds all the attributes of a file. It is also called index number.

    索引节点是一种数据结构,其中包含文件的所有属性。 也称为索引号。

    Some of the attributes of file are:

    文件的一些属性是:

    • File type

      文件类型
    • Permission

      允许
    • File size

      文件大小
    • Time when last it is modified

      最后修改的时间

    Note: Please while  reading thread concept, try to relate all this with process, thread will have its own, all those attributes as that of a process like its id(tid), scheduling parameter/policy etc. and  concept like context switching, different section etc. Thus try to relate all thread’s concept with that of a process.

    注意:请在阅读线程概念时,尝试将所有这些与进程相关联,线程将拥有自己的属性,所有这些属性都是进程的属性,例如其id(tid),调度参数/策略等,以及上下文切换等概念,不同因此,请尝试将所有线程的概念与进程的概念相关联。

    24. What is thread?

    24.什么是线程?

    Thread is a concurrent unit of execution within a process. A process can have multiple threads where each thread can perform a different task independently, thus increasing the efficiency of a process. A process always has one thread by default called main thread which is executed first.

    线程是进程内的并发执行单元。 一个进程可以具有多个线程,其中每个线程可以独立执行不同的任务,从而提高了进程的效率。 默认情况下,一个进程始终有一个线程称为主线程,该线程首先执行。

    Example:

    例:

    • Word processor, a background thread may check spelling and grammar while a foreground thread processes user input (keystrokes).

      字处理器中,后台线程可以检查拼写和语法,而前台线程则可以处理用户输入(按键)。
    • Web server – Multiple threads allow for multiple requests to be served simultaneously, without having to service requests sequentially.

      Web服务器–多个线程允许同时处理多个请求,而不必依次处理请求。

    25. State the benefits of a thread?

    25.陈述线程的好处?

    Some of the common advantages associated with threads are:

    与线程相关的一些常见优点是:

    • Responsiveness:

      响应能力:

    A process with thread are said to be more responsiveness than a process without thread because even if one thread is blocked or waiting for some resources the other thread still continue to function.

    具有线程的进程比没有线程的进程具有更高的响应能力,因为即使一个线程被阻塞或等待某些资源,另一个线程仍然可以继续运行。

    • Lighter:

      打火机:

    A thread is considered to be lighter than a process in terms of resource sharing and run time overhead. Most of the resource of a process are shared by all its thread making it lighter.

    就资源共享和运行时开销而言,线程被认为比进程轻。 进程的大多数资源都由其所有线程共享,从而使其更轻便。

    • Throughput:

      吞吐量:

    It improves the throughput of a multithreaded application, multiprocessor environment.

    它提高了多线程应用程序,多处理器环境的吞吐量。

    • Economy:

      经济:

    Creating and managing thread is much faster (context switching is faster) than performing same task for processes.

    创建和管理线程比为进程执行相同任务要快得多(上下文切换更快)。

    26. State the disadvantages associated with thread?

    26.陈述与线程相关的缺点吗?

    • Robustness:

      坚固性:

    It’s not as robust as process since if any one thread is terminated abnormally, it leads to entire process termination.

    它不像进程那样健壮,因为如果任何一个线程异常终止,它将导致整个进程终止。

    Thus many RTOS (Real Time Operating System) application uses processed over threads.

    因此,许多RTOS(实时操作系统)应用程序使用线程处理。

    • Increased Complexity

      复杂性增加

    It is more complex than a process in terms of synchronization overhead.

    就同​​步开销而言,它比过程更复杂。

    27. What is difference between a process and a threads?

    27.进程和线程之间有什么区别?

    Process Thread
    Process is used for heavyweight task Threads are used for small task(lightweight)
    Processes are less responsive than threads Threads are more responsive than process
    Processes are more robust than threads Threads are less robust
    Each process will have its own address space. Threads are within a process thus share same address space(memory)
    Processes have less synchronization overhead since all have separate address space(memory) Since they share same address space, synchronization is more overhead than process
    处理 线
    过程用于重量级任务 线程用于小型任务(轻量级)
    进程的响应速度不如线程 线程比进程更敏感
    进程比线程更健壮 线程不那么健壮
    每个进程将有其自己的地址空间。 线程在进程内,因此共享相同的地址空间(内存)
    进程具有较少的同步开销,因为所有进程都有单独的地址空间(内存) 由于它们共享相同的地址空间,因此同步比处理更多的开销

    28. What are different types of threads?

    28.什么是不同类型的线程?

    There are two types of threads:

    有两种类型的线程:

    • User level thread : java thread

      用户级线程:java线程
    • Kernel level thread: POSIX thread.

      内核级线程:POSIX线程。

    29. What is scheduler?

    29.什么是调度程序?

    It is one of the component of kernel responsible for scheduling that is deciding when to run which process.

    它是负责调度的内核组件之一,它决定何时运行哪个进程。

    30. What are different types of scheduler?

    30.有哪些不同类型的调度程序?

    There are three types of scheduler:

    调度程序分为三种:

    • Long Term scheduler:

      长期调度程序:

    It is also called job scheduler responsible for selecting processes from queue (job pool/secondary memory) and loading them to main memory for execution.

    它也称为作业调度程序,负责从队列(作业池/辅助内存)中选择进程并将其加载到主内存中以执行。

    • Short term scheduler:

      短期调度程序:

    It is also called CPU scheduler responsible for selecting a process among processes that are ready to execute and allocate CPU to one of them.

    它也称为CPU调度程序,负责在准备执行的进程中选择一个进程并将CPU分配给其中一个。

    This is nothing but a change of state of process from ready to running state. It is also called dispatcher.

    这不过是将流程状态从就绪状态更改为运行状态而已。 也称为调度程序。

    • Medium term scheduler:

      中期调度程序:

    It is also called swapper responsible for swapping a process from main memory to secondary memory in case if some high priority process needs to be given chance for execution.

    它也称为交换程序,负责将某个进程从主内存交换到辅助内存,以防某些高优先级的进程需要执行的机会。

    It reduces the degree of multiprogramming (many processes in main memory).

    它降低了多重编程的程度(主存储器中的许多进程)。

    31. What is preemptive and non-preemptive scheduling algorithm?

    31.什么是抢占式和非抢占式调度算法?

    A scheduling algorithm is preemptive if, once a process has been given the CPU can take away. The strategy of allowing processes that are logically runnable to be temporarily suspended is called Preemptive Scheduling and allowing the process to run till completion is called non-preemptive scheduling.

    如果一旦指定了进程,CPU便会抢走,则调度算法是抢先的。 允许将逻辑上可运行的进程暂时挂起的策略称为“抢先式调度”,将允许进程运行直到完成的策略称为“非抢先式调度”。

    32. What are different types of scheduling algorithm?

    32.有哪些不同类型的调度算法?

    There are four different types of scheduler:

    有四种不同类型的调度程序:

    • First come First serve(FCFS): First came process is served first

      先到先得(FCFS):先到先得流程
    • Round Robin(RR):Each process is given a quantum amount of time

      Round Robin(RR):每个过程都被分配了一个量子时间
    • Shortest job first(SJF):Process with lowest execution time is given first preference

      最短作业优先(SJF):优先选择执行时间最短的进程
    • Priority scheduling (ps): Priority value called (nice value) is used for selecting process. Its value is from 0 to 99. 0 being max and 99 being least.

      优先级调度(ps):优先级值(nice value)用于选择进程。 其值是从0到99。0是最大值,而99是最小值。

    33. What are different performance metric for scheduler?

    33.调度程序有哪些不同的性能指标?

    There are five performance metric for scheduler, those are as follows:

    调度程序有五个性能指标,如下所示:

    • CPU Utilization:

      CPU使用率:

    Percentage of time that the CPU is doing useful work (I.e. not being idle). 100% is perfect.

    CPU正在执行有用工作(即不处于空闲状态)的时间百分比。 100%完美。

    • Wait time:

      等待时间:

    Average time a process spends for its turn to get executed.

    流程执行该流程所花费的平均时间。

    • Throughput:

      吞吐量:

    Number of processes completed / time unit.

    完成的进程数/时间单位。

    • Response Time:

      响应时间:

    Average time elapsed from when process is submitted until useful output is obtained.

    从提交流程到获得有用的输出所经过的平均时间。

    • Turnaround Time:

      周转时间:

    Average time elapsed from when process is submitted to when it has completed.

    从流程提交到完成的平均时间。

    34. What is daemon process?

    34.什么是守护进程?

    A daemon process is one which runs at the background unlike the other foreground processes without the intervention of the user. It ends with “d”.

    守护进程是在后台运行的守护进程,与其他前台进程不同,它无需用户干预。 它以“ d”结尾。

    Example: crond is a daemon process in Linux operating system which is responsible for scheduling of an event like sending packets statistics at every 1 hours to server can be done with the help of crond daemon process.

    示例:crond是Linux操作系统中的守护进程,它可以安排事件的调度,例如可以在crond守护进程的帮助下完成每1小时向服务器发送一次数据包统计信息。

    35. What are different types of process in Linux?

    35. Linux中有哪些不同类型的进程?

    There are three different types of process in Linux, those are:

    Linux中有三种不同类型的过程,分别是:

    • Interactive-Foreground

      互动前景
    • Batch

      批量
    • Daemon-Background

      守护程序背景

    36. What is deadlock?

    36.什么是死锁?

    A deadlock is a situation where two or more process or threads sharing the same resource are effectively preventing each other from accessing the resource. In simple terms the resource needed by one process/threads are being used by others and so on, thus none of the process can continue executing leading to deadlock.

    死锁是指两个或多个共享同一资源的进程或线程有效地阻止了彼此访问资源的情况。 简单来说,一个进程/线程所需的资源正在被其他进程/线程使用,依此类推,因此任何进程都无法继续执行,从而导致死锁。

    37. What are the conditions required for deadlock to happen?

    37.发生僵局需要什么条件?

    There are four conditions required for deadlock which are stated below

    死锁需要满足以下四个条件

    Mutual Exclusion: At least one resource is held in a non-sharable mode that is only one process at a time can use the resource. If another process requests that resource, the requesting process has to wait till it is released.

    互斥:至少一种资源以不可共享的方式持有,一次只能有一个进程使用该资源。 如果另一个进程请求该资源,则请求进程必须等待直到释放它。

    Hold and Wait: There must exist a process that is holding at least one resource and is waiting to acquire additional resources that are currently being held by other processes.

    保持并等待:必须存在一个进程,该进程至少持有一个资源,并且正在等待获取其他进程当前正在持有的其他资源。

    No Preemption: Resources cannot be preempted; that is, a resource can only be released after the process has completed its task.

    无抢占:资源不能抢占; 也就是说,只能在进程完成其任务后才释放资源。

    Circular Wait: There must exist a set {p0, p1,…..pn} of waiting processes such that p0 is waiting for a resource which is held by p1, p1 is waiting for a resource which is held by p2,…, pn-1 is waiting for a resource which is held by pn and pn is waiting for a resource which is held by p0.

    循环等待:必须存在一组{p0,p1,..... pn}等待进程,以便p0正在等待由p1保留的资源,p1正在等待p2,...,pn保留的资源-1正在等待pn保留的资源,而pn正在等待p0保留的资源。

    Note: All the four conditions mentioned above has to be satisfied for deadlock to happen.

    注意:必须满足上述所有四个条件才能发生死锁。

    38. What is race condition?

    38.什么是比赛条件?

    Race condition is an undesirable situation where two or more threads/process are trying to access and change the value of data shared by them and the outcome of the operation depends upon the order in which the execution happens.

    竞争条件是一种不希望的情况,其中两个或多个线程/进程试图访问并更改它们共享的数据的值,并且操作的结果取决于执行的顺序。

    Thus it lead to data inconsistency and loss of its value as both threads are racing to change/access the shared data.

    因此,当两个线程都在争相更改/访问共享数据时,它会导致数据不一致并失去其价值。

    Example:

    例:

    Assume x =5;

    假设x = 5;

    Thread 1

    线程1

    x =x+1;

    x = x + 1;

    write x;

    写x;

    Thread 2

    线程2

    x=x+10;

    x = x + 10;

    write x;

    写x;

    Assume just before first write the first thread is suspended and control comes to second thread thus it increments the value of x by 10 and writes the value that is now x becomes 15.

    假设在第一次写入之前,第一个线程被挂起,控制权进入第二个线程,因此它将x的值增加10,然后写入现在x的值变为15。

    In this case we can see that value of x depends upon the order in which the thread executes and the first value of x is lost that x=x+1=5+1=6. Thus there is clear inconsistency among the value of x because of race condition. Here x is the shared variable among both the threads upon which both are racing to access/update its value. To avoid such inconsistencies we need a proper synchronization mechanism like semaphore, mutex (discussed later)

    在这种情况下,我们可以看到x的值取决于线程执行的顺序,并且x的第一个值丢失,即x = x + 1 = 5 + 1 = 6。 因此,由于竞争条件,x值之间存在明显的不一致。 在这里,x是两个线程都在争夺访问/更新其值的线程之间的共享变量。 为了避免这种不一致,我们需要一个适当的同步机制,例如信号量,互斥量(稍后讨论)。

    39. What is Zombie process?

    39.什么是僵尸进程?

    A zombie process also called defunct process is one which has completed its execution and is in terminated state but still has entry in the process table. It is denoted by “Z”. It shows that still the resources held by process are not freed upon termination.

    僵尸进程(也称为已终止进程)是已完成执行并处于终止状态但仍在进程表中具有条目的进程。 用“ Z”表示。 它表明,进程保留的资源仍然不会在终止时释放。

    It is dangerous because at one point of time system may run out of memory.

    这很危险,因为在某个时间点系统可能会用完内存。

    40. What is synchronization?

    40.什么是同步?

    As the name suggest it means a proper co-ordination among processes while running in terms of resources. It means sharing system resources by a process in such a way that concurrent access to shared data is handled thereby minimising the chance of inconsistent data as we saw in Race condition.

    顾名思义,它意味着在运行资源时在流程之间进行适当的协调。 这意味着通过一种过程来共享系统资源,这样就可以处理对共享数据的并发访问,从而最大程度地减少了在竞赛情况下看到不一致数据的机会。

    41. What are different synchronization mechanism?

    41.同步机制有哪些不同?

    Some of the common synchronization mechanism are:

    一些常见的同步机制是:

    • Semaphore

      信号
    • Mutex

      互斥体

    42. What is semaphore?

    42.什么是信号量?

    Semaphore is one of the simplest synchronization mechanism used to control access to a common resource by multiple processes in a concurrent system such as a multiprogramming operating system.

    信号量是最简单的同步机制之一,用于控制并发系统(例如,多程序操作系统)中的多个进程对公共资源的访问。

    It’s a variable with a value range between 0 to N where N = maximum resources -1;

    它是一个变量值,范围在0到N之间,其中N =最大资源-1;

    43. What are different types of semaphore?

    43.有哪些不同类型的信号量?

    There are two types of semaphore, those are:

    信号量有两种,分别是:

    • Binary Semaphore:

      二进制信号量:

    Semaphore which can have only two values either 0 or 1. It is also called Boolean semaphore controlling/protecting just one resource.

    信号量只能有两个值0或1。它也称为布尔信号量,仅控制/保护一个资源。

    • Counting Semaphore:

      计数信号量:

    Semaphore whose value can be in the range of 0 to n where n =max -1; where max is nothing but the maximum resource.

    信号量,其值可以在0到n的范围内,其中n = max -1; 其中max就是最大资源。

    When number of resources a semaphore protects is greater than 1, it’s called counting semaphore.

    当信号灯保护的资源数量大于1时,称为计数信号灯。

    44. How is synchronization achieved by semaphore or What are different operations performed on semaphore variables?

    44.通过信号量如何实现同步?或者对信号量变量执行哪些不同的操作?

    There are two operations which are performed on semaphore which helps in synchronization, those are:

    有两种对信号量执行的有助于同步的操作,它们是:

    • Wait:

      等待:

    If the semaphore value is not negative, decrement the value by 1.

    如果信号量值不为负,则将该值减1。

    • Signal:

      信号:

    Increments the value of semaphore by 1.

    将信号量的值增加1。

    For example:

    例如:

    Say the value of semaphore variable is initialized by 1 and if one process tries to use the shared variable, it decrements the value by 1 and access it. In the meantime if other process attempts to access it, it finds the semaphore variable 0 thus has to wait till the first process completes its task and increments the value back to 1.

    假设信号量变量的值由1初始化,并且如果一个进程尝试使用共享变量,则它将值减1并访问它。 同时,如果其他进程尝试访问它,它会发现信号量变量0,因此必须等到第一个进程完成其任务并将其值增加回1。

    Thus form the above explanation we can see that there is a proper synchronization (controlling one process form another) avoiding any race condition.

    因此,从上面的解释中我们可以看到,存在适当的同步(从另一个进程控制一个进程),避免了任何竞争状况。

    45. What is mutex?

    45.什么是互斥锁?

    Mutex is a locking mechanism which allows only one process to access the resource at a time.

    Mutex是一种锁定机制,一次仅允许一个进程访问资源。

    It stands for mutual exclusion and ensure that only one process can enter the critical section at a time.

    它代表互斥,并确保一次只能有一个过程进入关键部分。

    46. What is critical section of code?

    46.代码的关键部分是什么?

    As the name suggest it is that section or part of code which has variables or other resources which is being shared by two process, and if allowed to access may lead to race condition. To avoid this we need a mutex which ensures only one process can enter the critical section of code at a time.

    顾名思义,这是代码的一部分或一部分具有由两个进程共享的变量或其他资源,如果允许访问,则可能导致竞争状态。 为了避免这种情况,我们需要一个互斥体,以确保一次只能有一个进程输入关键的代码部分。

    47. Differentiate between semaphore and mutex?

    47.区分信号量和互斥量?

    Below stated are some important difference held between mutex and semaphore

    以下是互斥量与信号量之间的一些重要区别

                             Semaphore                               Mutex
    It is a synchronization mechanism It is a locking mechanism
    A Semaphore controls access to a shared pool of resources. It provides operations to Wait () until one of the resources in the pool becomes available, and Signal () when it is given back to the pool. A Mutex controls access to a single shared resource.
    The other process can also the release the lock held by others The process which has acquired the lock can only release the lock
    信号 互斥体
    这是一个同步机制 这是一种锁定机制
    信号量控制对共享资源池的访问。 它提供以下操作:Wait()直到池中的一种资源可用,然后提供Signal()到池中的一种资源。 Mutex控制对单个共享资源的访问。
    其他过程也可以释放他人持有的锁 已获取锁的进程只能释放锁

    48. What do you mean by virtual memory?

    48.虚拟内存是什么意思?

    Virtual memory is a memory management scheme used by operating system which allows a system to compensate for the shortage of physical memory.

    虚拟内存是操作系统使用的内存管理方案,它允许系统补偿物理内存的不足。

    Virtual address space is increased using active memory in RAM and inactive memory in hard disk drives (HDDs) to form contiguous addresses that hold both the application and its data.

    通过使用RAM中的活动内存和硬盘驱动器(HDD)中的不活动内存来增加虚拟地址空间,以形成包含应用程序及其数据的连续地址。

    49. What do you mean by logical and physical address?

    49.逻辑和物理地址是什么意思?

    Logical Address:

    逻辑地址:

    It can be defined as an address generated by CPU, later these addresses are mapped to physical address with the help of mechanism called paging (discussed later).

    可以将其定义为CPU生成的地址,稍后这些地址将在称为分页的机制的帮助下映射到物理地址(稍后讨论)。

    Physical Address:

    实际地址:

    It is nothing but the actual address that belongs to main memory where our program resides for execution.

    它不过是属于程序要执行的主内存的实际地址。

    50. What is paging?

    50.什么是分页?

    The mapping from virtual to physical address is done by the memory management unit (MMU) which is a hardware device and this mapping is known as paging technique.

    从虚拟地址到物理地址的映射是由作为硬件设备的内存管理单元(MMU)完成的,这种映射称为分页技术。

    It ensures that the physical address of space to be non-contiguous. In this the virtual memory is divided into fixed size pages and the physical memory is divided into equal size called page frames.

    它确保空间的物理地址不连续。 在这种情况下,虚拟内存被分为固定大小的页面,而物理内存被分为相等大小的称为页面帧的页面。

    51. What is the size of each page?

    51.每页大小是多少?

    The size of page is 4k.

    页面大小为4k。

    52. What is demand paging?

    52.什么是需求分页?

    It is quite similar to a paging system with swapping where pages are loaded into main memory only on demand ,till then the processes resides in secondary memory.

    它与分页系统非常相似,后者具有交换功能,即仅按需将页面加载到主内存中,直到进程驻留在辅助内存中。

    For any process to execute, its pages are loaded into main memory, thus the entire page is not brought into main memory rather the pages are loaded only on demand not in advance. This is referred as demand paging.

    对于要执行的任何进程,其页面均被加载到主存储器中,因此不会将整个页面带入主存储器中,而是仅根据需求而不是事先加载页面。 这称为需求分页。

    Example:

    例:

    We have a process responsible for database function like insert, query, delete and thus it should be understood that this process is divided into pages say one page for each function and at certain point of time, it needs to perform query so there is no point in loading the entire process (pages) rather just the page related to query function.

    我们有一个过程负责数据库功能,例如插入,查询,删除,因此应该理解,该过程分为多个页面,每个功能说一页,并且在某个时间点需要执行查询,因此没有意义加载整个过程(页面),而不仅仅是加载与查询功能相关的页面。

    53. What is page fault?

    53.什么是页面错误?

    As the name suggest, we are looking for certain page in main memory and it is not found, its termed as page fault else page hit.

    顾名思义,我们正在主内存中查找某些页面,但找不到该页面,称为页面错误或其他页面命中。

    54. What is page replacement algorithm and name it?

    54.什么是页面替换算法并命名?

    As above we have seen that there might be situation of page fault, in that case we need to bring that page from secondary memory to main memory but if there is no room for new page in the main memory, some page from the main memory has to be replaced with new page form secondary memory. This is called page replacement and one of the common algorithms is Least Recently Used (LRU) that is replace the page that has been unused for longest time.

    如上所述,我们已经看到可能存在页面错误的情况,在这种情况下,我们需要将该页面从辅助存储器带到主存储器,但是如果主存储器中没有空间容纳新页面,则主存储器中的某些页面会用新的页面形式的辅助存储器替换。 这被称为页面替换,并且最常用的算法之一是最近最少使用(LRU),它是用来替换最长时间未使用的页面。

    55. What is cache?

    55.什么是缓存?

    Cache memory is a high speed memory in the CPU that is used for faster access to data. It provides the processor with the most frequently requested data

    高速缓冲存储器是CPU中的高速存储器,用于更快地访问数据。 它为处理器提供最常请求的数据

    56. What is TLB?

    56.什么是TLB?

    It is a hardware cache responsible for speeding up the translation of logical address to physical address that is mapping between logical and physical address.

    它是一个硬件高速缓存,负责加速逻辑地址到物理地址(即逻辑地址和物理地址之间的映射)的转换。

    It contains the page table entries which is most recently used, thus before looking into main memory for page, TLB is searched if not found main memory lookup is done for required page.

    它包含最近使用的页表条目,因此在查找主内存页之前,如果未找到所需页的主内存查找,则搜索TLB。

    57. What is fragmentation and state its types?

    57.什么是碎片并说明其类型?

    As we saw above that there is frequent swapping of page in and out form memory, the free space in main memory is broken into small pieces. It happens after sometime the processes cannot be allocated to memory blocks considering their small size and memory blocks remains unused. This problem is called fragmentation.

    正如我们在上面看到的,页面内存的换入和换出很频繁,主内存中的可用空间被分成小块。 考虑到它们的体积小且内存块仍未使用,有时会在无法将进程分配给内存块后发生。 此问题称为碎片。

    There are two types of fragmentation:

    碎片有两种类型:

    • Internal fragmentation:

      内部碎片:

    Memory block assigned to process is bigger. Some portion of memory is left unused, as it cannot be used by another process.

    分配给进程的内存块更大。 内存的某些部分未被使用,因为它不能被另一个进程使用。

    • External fragmentation:

      外部碎片:

    Total memory space is enough to satisfy a request or to reside a process in it, but they are  not contiguous, so it cannot be used.

    总内存空间足以满足请求或在其中驻留进程,但是它们不是连续的,因此无法使用。

    58. What is IPC and state some of them?

    58.什么是IPC,并说明其中一些?

    IPC means inter process communication- process to process notification, process to process synchronization which allows a programmer to coordinate activities among different program processes that can run concurrently in an operating system

    IPC表示进程间通信-进程到进程的通知,进程到进程的同步,这使程序员可以协调可以在操作系统中同时运行的不同程序进程之间的活动

    Some of the common IPC mechanism are:

    一些常见的IPC机制是:

    • Message Queue:

      消息队列:

    A queue of messages that is maintained between processes used for exchange for messages and other important information among processes.

    在进程之间维护的消息队列,用于在进程之间交换消息和其他重要信息。

    • Shared Memory:

      共享内存:

    In this memory (page) is shared among the processes in user space and one process can write into it and other can read.

    在该内存(页面)中,用户空间中的进程之间共享该内存(页面),一个进程可以写入其中,而另一个可以读取。

    • Pipe:

      管:

    A pipe is a technique for passing information from one program process to another. Basically, a pipe passes a parameter such as the output of one process to another process which accepts it as input.

    管道是一种用于将信息从一个程序进程传递到另一个程序进程的技术。 基本上,管道将一个过程的输出之类的参数传递给另一个接受该过程作为输入的过程。

    Example:

    例:

    ps –ef | grep “skype”

    ps –ef | grep“ skype”

    What it does that the output of “ps –ef” is given as an input to “grep” command with the help of pipe and “ps” is used in Linux to get the running process on system and “grep” is used for search.

    在管道的帮助下,将“ ps –ef”的输出作为“ grep”命令的输入,在Linux中使用“ ps”获取系统上正在运行的进程,而使用“ grep”进行搜索。

    • Signal:

      信号:

    Signals come under IPC mechanisms that are used for notification – notification can be process to process – notification can be system to process.

    信号属于用于通知的IPC机制-通知可以逐个处理-通知可以逐个处理。

    Kill is the command by which one process can send a signal to other.

    Kill是一个进程可以向另一个进程发送信号的命令。

    Syntax: kill <signal_name> <process_id>

    语法:kill <信号名称> <进程ID>

    Example:

    例:

    1)  Kill SIGINT 1234

    1)杀死SIGINT 1234

    2) Kill SIGQUIT 1234

    2)杀死SIGQUIT 1234

    Each signal has its own number.

    每个信号都有自己的编号。

     Signal Name Signal Number Description
    SIGINT 2 Issued if the user sends an interrupt signal (Ctrl + C)
    SIGQUIT 3 Issued if the user sends a quit signal (Ctrl + D
    信号名称 信号编号 描述
    SIGINT 2 如果用户发送中断信号(Ctrl + C),则发出
    SIGQUIT 3 如果用户发送退出信号(Ctrl + D

    59. State the purpose of a signal?

    59.陈述信号的目的?

    Signals serves two important purposes:

    信号有两个重要目的:

    • To make a process aware that a specific event has occurred

      使流程知道发生了特定事件
    • To force a process to execute a signal handler (customized/user) function included in user’s code.

      强制进程执行用户代码中包含的信号处理程序(自定义/用户)功能。

    60. What is interrupt?

    60.什么是中断?

    An interrupt is a signal to the processor which can be generated by hardware or a software indicating an event that needs immediate attention. An interrupt indicates the processor to a high-priority condition requiring the interruption of the current task

    中断是发给处理器的信号,可由硬件或软件生成,指示需要立即注意的事件。 中断表示处理器处于高优先级状态,需要中断当前任务

    61. What is starvation and aging?

    61.什么是饥饿和衰老?

    Starvation:

    饥饿:

    Starvation is a resource management problem where a process is denied of resource or service for a long time or has been repeatedly denied services.

    饥饿是资源管理问题,其中一个进程长时间拒绝资源或服务,或者一再被拒绝服务。

    Aging:

    老化:

    This is a solution to starvation which involves gradually increasing the priority of processes that wait in the system for a long time.

    这是一种饥饿的解决方案,它涉及逐步增加在系统中等待很长时间的进程的优先级。

    The aging factor must increase the requests priority as time passes and must ensure that a request will eventually be the highest priority request (after it has waited long enough) and gets the chance to execute.

    随着时间的流逝,老化因素必须提高请求的优先级,并且必须确保请求最终成为最高优先级的请求(在等待了足够长的时间之后)并有机会执行。

    Note: It’s not same as deadlock.

    注意:它与死锁不同。

    Comment below if you have any queries related to above operating system interview questions and answers.

    如果您有关于上述操作系统采访问题和答案的任何疑问,请在下面评论。

    翻译自: https://www.thecrazyprogrammer.com/2017/03/operating-system-interview-questions-and-answers.html

    操作系统 面试问题

    展开全文
  • 操作系统面试

    万次阅读 多人点赞 2020-08-10 11:40:35
    进程就是正在执行的程序,是操作系统资源分配的基本单位。一般来说,进程包含指令、数据和PCB。 延伸问题:孤儿进程和僵尸进程有什么区别? 孤儿进程就是说一个父进程退出,而它的一个或多个子进程还在运行,那么...

    目录

     

    什么是进程?

    延伸问题:什么是守护进程?

    什么是线程?

    进程与线程有什么区别?

    延伸问题:线程有哪两种?

    并发和并行有什么区别?

    大内核和微内核有什么区别?

    分时系统和实时系统有什么区别?

    静态链接和动态链接有什么区别?

    编译有哪些阶段?

    进程有哪些状态?

    进程调度算法有哪些?

    延伸问题:什么是抢占式调度?什么是非抢占式调度?

    什么是上下文切换?

    系统调用和库函数有什么区别?

    什么是死锁?

    延伸问题:死锁产生有哪些条件?

    延伸问题:怎么解决死锁?

    对于死锁,主要有4种解决策略。

    进程同步的方式有哪些?

    进程间通信的方式有哪些?

    管道

    有哪些磁盘调度算法?

    什么是虚拟内存?

    什么是分页系统?

    分页和分段有什区别?

    页面替换算法有哪些?

    Linux文件系统是怎么样的?

    硬链接和软链接有什么区别?


    什么是进程?

    进程就是正在执行的程序,是操作系统资源分配的基本单位。一般来说,进程包含指令、数据和PCB。

    延伸问题:孤儿进程和僵尸进程有什么区别?

    • 孤儿进程就是说一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程ID为1的进程)所收养,并由 init 进程对它们完成状态收集工作。因为孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。
    • 僵尸进程就是一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。僵尸进程通过 ps 命令显示出来的状态为 Z。

    系统所能使用的进程号是有限的,如果产生大量僵尸进程,可能会因为没有可用的进程号而导致系统不能产生新的进程。如果要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。

    延伸问题:什么是守护进程?

    守护进程是运行在后台的一种特殊进程,它是独立于控制终端的,并周期性地执行某些任务。

    什么是线程?

    线程是进程内部的不同的执行路径,是操作系统独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。比如说,微信和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。

    进程与线程有什么区别?

    拥有资源

    进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属于进程的资源。

    调度

    线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。

    系统开销

    由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。

    通信方面

    线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。

    延伸问题:线程有哪两种?

    • 用户级线程(user level thread):对于这类线程,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。在应用程序启动后,操作系统分配给该程序一个进程号,以及其对应的内存空间等资源。应用程序通常先在一个线程中运行,该线程被成为主线程。在其运行的某个时刻,可以通过调用线程库中的函数创建一个在相同进程中运行的新线程。用户级线程的好处是非常高效,不需要进入内核空间,但并发效率不高。
    • 内核级线程(kernel level thread):对于这类线程,有关线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只能调用内核线程的接口。内核维护进程及其内部的每个线程,调度也由内核基于线程架构完成。内核级线程的好处是,内核可以将不同线程更好地分配到不同的CPU,以实现真正的并行计算。

    事实上,在现代操作系统中,往往使用组合方式实现多线程,即线程创建完全在用户空间中完成,并且一个应用程序中的多个用户级线程被映射到一些内核级线程上,相当于是一种折中方案。

    并发和并行有什么区别?

    并发就是在一段时间内,多个任务都会被处理;但在某一时刻,只有一个任务在执行。单核处理器可以做到并发。比如有两个进程A和B,A运行一个时间片之后,切换到B,B运行一个时间片之后又切换到A。因为切换速度足够快,所以宏观上表现为在一段时间内能同时运行多个程序。

    并行就是在同一时刻,有多个任务在执行。这个需要多核处理器才能完成,在微观上就能同时执行多条指令,不同的程序被放到不同的处理器上运行,这个是物理上的多个进程同时进行。

    大内核和微内核有什么区别?

    • 大内核,就是将操作系统的全部功能都放进内核里面,包括调度、文件系统、网络、设备驱动器、存储管理等等,组成一个紧密连接整体。大内核的优点就是效率高,但是很难定位bug,拓展性比较差,每次需要增加新的功能,都要将新的代码和原来的内核代码重新编译。
    • 微内核与单体内核不同,微内核只是将操作中最核心的功能加入内核,包括IPC、地址空间分配和基本的调度,这些东西都在内核态运行,其他功能作为模块被内核调用,并且是在用户空间运行。微内核比较好维护和拓展,但是效率可能不高,因为需要频繁地在内核态和用户态之间切换。

    分时系统和实时系统有什么区别?

    • 分时系统(Sharing time system)就是系统把CPU时间分成很短的时间片,轮流地分配给多个作业。它的优点就是对多个用户的多个作业都能保证足够快的响应时间,并且有效提高了资源的利用率。
    • 实时系统(Real-time system)是系统对外部输入的信息,能够在规定的时间内(截止期限)处理完毕并做出反应。它的优点是能够集中地及时地处理并作出反应,高可靠性,安全性。
    • 通常计算机采用的是分时,就是多个进程/用户之间共享CPU,从形势上实现多任务。各个用户/进程之间的调度并非精准度特别高,如果一个进程被锁住,可以给它分配更多的时间。而实时操作系统则不同,软件和硬件必须遵从严格的时间限制,超过时限的进程可能直接被终止。在这样的操作系统中,每次加锁都需要仔细考虑。

    静态链接和动态链接有什么区别?

    • 静态链接就是在编译期间,由编译器和连接器将静态库集成到应用程序内,并制作成目标文件以及可以独立运作的可执行文件。静态库一般是一些外部函数与变量的集合。
    • 静态库很方便,但是如果我们只是想用库中的某一个函数,却仍然得把所有的内容都链接进去。一个更现代的方法是使用共享库,避免了在文件中静态库的大量重复。
    • 动态链接可以在首次载入的时候执行,也可以在程序开始执行的时候完成。这个是由动态链接器完成,比方标准 C 库(libc.so) 通常就是动态链接的,这样所有的程序可以共享同一个库,而不用分别进行封装。

    编译有哪些阶段?

    • 预处理阶段:处理以 # 开头的预处理命令;
    • 编译阶段:翻译成汇编文件;
    • 汇编阶段:将汇编文件翻译成可重定位目标文件;
    • 链接阶段:将可重定位目标文件和 printf.o 等单独预编译好的目标文件进行合并,得到最终的可执行目标文件。

    进程有哪些状态?

     

    • 在五状态模型里面,进程一共有5中状态,分别是创建、就绪、运行、终止、阻塞。
    • 运行状态就是进程正在CPU上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。
    • 就绪状态就是说进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到CPU即可运行。
    • 阻塞状态就是进程正在等待某一事件而暂停运行,比如等待某资源为可用或等待I/O完成。即使CPU空闲,该进程也不能运行。

    运行态→阻塞态:往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。

    阻塞态→就绪态:则是等待的条件已满足,只需分配到处理器后就能运行。

    运行态→就绪态:不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢占处理器等。

    就绪态→运行态:系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态。

    进程调度算法有哪些?

    先来先服务

    非抢占式的调度算法,按照请求的顺序进行调度。

    有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。另外,对I/O密集型进程也不利,因为这种进程每次进行I/O操作之后又得重新排队。

    短作业优先

    非抢占式的调度算法,按估计运行时间最短的顺序进行调度。

    长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。

    最短剩余时间优先

    最短作业优先的抢占式版本,按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。

    时间片轮转

    将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。

    时间片轮转算法的效率和时间片的大小有很大关系:

    • 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。
    • 而如果时间片过长,那么实时性就不能得到保证。

    优先级调度

    为每个进程分配一个优先级,按优先级进行调度。

    为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。

    延伸问题:什么是抢占式调度?什么是非抢占式调度?

    • 抢占式就是说操作系统将正在运行的进程强行暂停,由调度器将CPU分配给其他就绪进程。

    • 非抢占式是调度器一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生进程调度进程调度某事件而阻塞时,才把处理机分配给另一个进程。

    什么是上下文切换?

    对于单核单线程CPU而言,在某一时刻只能执行一条CPU指令。上下文切换(Context Switch)是一种将CPU资源从一个进程分配给另一个进程的机制。从用户角度看,计算机能够并行运行多个进程,这恰恰是操作系统通过快速上下文切换造成的结果。在切换的过程中,操作系统需要先存储当前进程的状态(包括内存空间的指针,当前执行完的指令等等),再读入下一个进程的状态,然后执行此进程。

    系统调用和库函数有什么区别?

    • 系统调用是应用程序向系统内核请求服务的方式。可以包括硬件相关的服务(例如,访问硬盘等),或者创建新进程,调度其他进程等。系统调用是程序和操作系统之间的重要接口。
    • 库函数就是说把一些常用的函数编写完放到一个文件里,编写应用程序时调用,这是由第三方提供的,发生在用户地址空间。
    • 在移植性方面,不同操作系统的系统调用一般是不同的,移植性差;库函数会相对好一些。比如说在所有的ANSI C编译器版本中,C库函数是相同的。
    • 在调用开销方面,系统调用需要在用户空间和内核环境间切换,开销较大;而库函数调用开销较小。

    什么是死锁?

    在两个或多个并发进程中,如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么该进程集合就产生了死锁。

    延伸问题:死锁产生有哪些条件?

    死锁产生的根本原因是多个进程竞争资源时,进程的推进顺序出现不正确。

    • 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。
    • 占有和等待:已经得到了某个资源的进程可以再请求新的资源。
    • 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
    • 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。

    延伸问题:怎么解决死锁?

    对于死锁,主要有4种解决策略。

    鸵鸟策略

    就是直接忽略死锁。就像鸵鸟遇到危险的时候,把头埋在沙子里,假装根本没发生问题。因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施的方案会获得更高的性能。当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。

    死锁预防

    死锁预防是指通过破坏死锁产生的四个必要条件中的一个或多个,以避免发生死锁。

    • 破坏互斥:不让资源被一个进程独占,可通过假脱机技术允许多个进程同时访问资源;
    • 破坏占有和等待:有两种方案,
      • 已拥有资源的进程不能再去请求其他资源。一种实现方法是要求进程在开始执行前请求需要的所有资源。
      • 要求进程请求资源时,先暂时释放其当前拥有的所有资源,再尝试一次获取所需的全部资源。
    • 破坏不可抢占:有些资源可以通过虚拟化方式实现可抢占;
    • 破坏循环等待:有两种方案:
      • 一种方法是保证每个进程在任何时刻只能占用一个资源,如果要请求另一个资源,必须先释放第一个资源;
      • 另一种方法是将所有资源进行统一编号,进程可以在任何时刻请求资源,但要求进程必须按照顺序请求资源。

    死锁避免

    为了避免因为预防死锁而导致所有线程变慢,死锁避免采用了与死锁预防相反的措施。它允许三个必要条件,但通过算法判断资源请求是否可能导致循环等待的形成并相应决策,来避免死锁点的产生。因此,其前提是知道当前资源使用的整体情况,以及申请资源线程本身所占有的资源细节。

    判断和决策中,主要使用两种避免方法。

    • 线程启动拒绝:如果一个线程的请求会引发死锁,则不允许其启动。
    • 资源分配拒绝:如果一个线程增加的资源请求会导致死锁,则不允许此申请。

    整体来看,死锁避免是从资源和线程相互间关系着手,避免形成循环等待是其主要任务。

    死锁检测和恢复

    可以允许系统进入死锁状态,但会维护一个系统的资源分配图,定期调用死锁检测算法来检测途中是否存在死锁,检测到死锁发生后,采取死锁恢复算法进行恢复。

    死锁检测方法如下:

    • 在资源分配图中,找到不会阻塞又不独立的进程结点,使该进程获得其所需资源并运行,运行完毕后,再释放其所占有的全部资源。也就是消去该进程结点的请求边和分配边。
    • 使用上面的算法进行一系列简化,若能消去所有边,则表示不会出现死锁,否则会出现死锁。

    检测到死锁后,就需要解决死锁。目前操作系统中主要采用如下几种方法:

    • 取消所有死锁相关线程,简单粗暴,但也确实是最常用的
    • 把每个死锁线程回滚到某些检查点,然后重启
    • 连续取消死锁线程直到死锁解除,顺序基于特定最小代价原则
    • 连续抢占资源直到死锁解除

    进程同步的方式有哪些?

    临界区

    临界区是一段代码,在临界区内进程将访问临界资源。任何时候最多只有一个进程可以进入临界区,也就是说,临界区具有排他性。所以,为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。

    互斥量

    就是使用一个互斥的变量来直接制约多个进程,每个进程只有拥有这个变量才具有访问公共资源的权限,因为互斥量只有一个,所以能保证资源的正确访问。

    信号量

    信号量(Semaphore)是一个整型变量,可以对其执行自增和自减操作,自减操作通常也叫做P操作,自增操作也称为V操作。这两个操作需要被设计成原语,是不可分割,通常的做法是在执行这些操作的时候屏蔽中断。进程使用这两个操作进行同步。

    • 对于P操作,如果执行操作后信号量小于 0,那么执行该操作的进程就会阻塞,否则继续执行;
    • 对于V操作,如果操作之后的信号量小于等于0,那么就会从阻塞队列唤醒一个进程。

    管程

    管程使用的是面向对象思想,将表示共享资源的数据结构还有相关的操作,包括同步机制,都集中并封装到一起。所有进程都只能通过管程间接访问临界资源,而管程只允许一个进程进入并执行操作,从而实现进程互斥。管程中设置了多个条件变量,表示多个进程被阻塞或挂起的条件。对条件变量执行 wait() 操作会导致调用进程阻塞,把管程让出来给另一个进程持有。signal() 操作用于唤醒被阻塞的进程。管程有一个重要特性,就是在一个时刻只能有一个进程使用管程。进程在无法继续执行的时候不能一直占用管程,否则其它进程永远不能使用管程。

    进程间通信的方式有哪些?

    管道

    • 管道是半双工的,数据只能向一个方向流动;如果需要双方通信时,需要建立起两个管道。
    • 管道只能用于父子进程或者兄弟进程之间或者说具有亲缘关系的进程;
    • 管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,只存在与内存中。
    • 管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据,管道一端的进程顺序的将数据写入缓冲区,另一端的进程则顺序的读出数据。该缓冲区可以看做是一个循环队列,读和写的位置都是自动增长的,不能随意改变,一个数据只能被读一次,读出来以后在缓冲区就不复存在了。当缓冲区读空或者写满时,有一定的规则控制相应的读进程或者写进程进入等待队列,当空的缓冲区有新数据写入或者满的缓冲区有数据读出来时,就唤醒等待队列中的进程继续读写。
    • 管道的主要局限性正体现在它的特点上,比如只支持单向数据流,只能用于具有亲缘关系的进程之间,没有名字,管道的缓冲区是有限的等等。

    命名管道

    这种管道也叫FIFO。命名管道不同于管道的地方,在于它提供了一个路径名与之关联,以命名管道的文件形式存在于文件系统中,这样,即使与命名管道的创建进程不存在亲缘关系的进程,只要可以访问文件系统中的这个路径,就能够彼此通过命名管道相互通信。命名管道严格遵循先进先出原则的,不支持诸如数据随机定位。命名管道的名字存在于文件系统中,但内容存放在内存中。

    消息队列

    消息队列是消息的链表,具有特定的格式,它是存放在内存里面的,并且每个消息队列都有唯一的标识。消息队列允许一个或多个进程向它写入与读取消息,所以,利用消息队列,一个进程可以将一个数据块发送到另一个进程,每个数据块都有一个类型,接收进程可以独立地接收含有不同类型的数据结构,这个过程是异步的,我们可以通过发送消息来避免命名管道的同步和阻塞问题。但消息队列的数据块有一个最大长度的大小限制。

    共享内存

    • 共享内存是针对其他通信机制运行效率较低而设计的,它可以让多个进程可以可以直接读写同一块内存空间,是最快的IPC形式。
    • 为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。
    • 由于多个进程共享一段内存,因此需要依靠某种同步机制来达到进程间的同步和互斥。

    信号量

    信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它是一种类似于锁的机制,就是防止某进程正在访问共享资源时,其他进程也访问该资源。参考这里

    Socket

    • Socket就是套接字,套接字也是一种通信机制,凭借这种机制,可以让不在同一台主机上的两个进程,通过网络进行通信,一般可以用在客户端和服务器之间的通信。
    • 实际上,Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 协议的传输层里面复杂的操作,抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。

    延伸问题:Socket通信流程是怎样的?

     

    • 概括地说,就是通信的两端都建立了一个 Socket ,然后通过 Socket 对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。
    • 对于客户端,它的的过程比较简单,首先创建 Socket,通过TCP连接服务器,将 Socket 与远程主机的某个进程连接,然后就发送数据,或者读取响应数据,直到数据交换完毕,关闭连接,结束 TCP 对话。
    • 对于服务端,先初始化 Socket,建立流式套接字,与本机地址及端口进行绑定,然后通知 TCP,准备好接收连接,调用 accept() 阻塞,等待来自客户端的连接。如果这时客户端与服务器建立了连接,客户端发送数据请求,服务器接收请求并处理请求,然后把响应数据发送给客户端,客户端读取数据,直到数据交换完毕。最后关闭连接,交互结束。

    延伸问题:从TCP连接的角度说说Socket通信流程。

     

    首先是三次握手的Socket交互流程。

    1. 服务器调用 socket()、bind()、listen() 完成初始化后,调用 accept() 阻塞等待;
    2. 客户端 Socket 对象调用 connect() 向服务器发送了一个 SYN 并阻塞;
    3. 服务器完成了第一次握手,即发送 SYN 和 ACK 应答;
    4. 客户端收到服务端发送的应答之后,从 connect() 返回,再发送一个 ACK 给服务器;
    5. 服务器 Socket 对象接收客户端第三次握手 ACK 确认,此时服务端从 accept() 返回,建立连接。

    接下来就是两个端的连接对象互相收发数据。

     

    然后是四次挥手的Socket交互流程。

    1. 某个应用进程调用 close() 主动关闭,发送一个 FIN;
    2. 另一端接收到 FIN 后被动执行关闭,并发送 ACK 确认;
    3. 之后被动执行关闭的应用进程调用 close() 关闭 Socket,并也发送一个 FIN;
    4. 接收到这个 FIN 的一端向另一端 ACK 确认。

    有哪些磁盘调度算法?

    先来先服务

    • 按照磁盘请求的顺序进行调度。
    • 优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。

    最短寻道时间优先

    • 优先调度与当前磁头所在磁道距离最近的磁道。
    • 虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。一般来说,两端的磁道请求更容易出现饥饿现象。

    电梯算法

    • 也叫SCAN扫描算法。电梯算法就是说读写磁头总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。
    • 因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了最短寻道时间优先的饥饿问题。

    什么是虚拟内存?

    虚拟内存就是说,让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。虚拟内存使用部分加载的技术,让一个进程或者资源的某些页面加载进内存,从而能够加载更多的进程,甚至能加载比内存大的进程,这样看起来好像内存变大了,这部分内存其实包含了磁盘或者硬盘,并且就叫做虚拟内存。

    什么是分页系统?

    分页就是说,将磁盘或者硬盘分为大小固定的数据块,叫做页,然后内存也分为同样大小的块,叫做页框。当进程执行的时候,会将磁盘的页载入内存的某些页框中,并且正在执行的进程如果发生缺页中断也会发生这个过程。页和页框都是由两个部分组成的,一个是页号或者页框号,一个是偏移量。分页一般是有硬件来完成的,每个页都对应一个页框,它们的对应关系存放在一个叫做页表的数据结构中,页号作为这个页表的索引,页框号作为页表的值。操作系统负责维护这个页表。

    分页和分段有什区别?

    • 分页对程序员是透明的,但是分段需要程序员显式划分每个段。
    • 分页的地址空间是一维地址空间,分段是二维的。
    • 页的大小不可变,段的大小可以动态改变。
    • 分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。

    页面替换算法有哪些?

    在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。

    最佳算法

    所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。这是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。

    先进先出

    选择换出的页面是最先进入的页面。该算***将那些经常被访问的页面也被换出,从而使缺页率升高。

    LRU

    虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。

    时钟算法

    时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。它将整个环形链表的每一个页面做一个标记,如果标记是0,那么暂时就不会被替换,然后时钟算法遍历整个环,遇到标记为1的就替换,否则将标记为0的标记为1。

    Linux文件系统是怎么样的?

    Linux文件系统里面有文件和目录,组成一个树状的结构,树的每一个叶子节点表示文件或者空目录。每个文件基本上都由两部分组成:

    • inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;
    • block:记录文件的内容,文件太大时,会占用多个 block。

    除此之外还包括:

    • superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
    • block bitmap:记录 block 是否被使用的位图。

    当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。

     

    硬链接和软链接有什么区别?

    • 硬链接就是在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。删除任意一个条目,文件还是存在,只要引用数量不为 0。但是硬链接有限制,它不能跨越文件系统,也不能对目录进行链接。
    • 符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。当源文件被删除了,链接文件就打不开了。因为记录的是路径,所以可以为目录建立符号链接。

     

    展开全文
  • 操作系统面试题库

    2018-05-01 13:57:01
    操作系统面试题,涵盖基础问题,内存管理,进程调度等
  • 操作系统面试笔记.pdf

    2020-04-10 12:23:14
    操作系统面试笔记.pdf
  • 操作系统面试题,包含各种操作系统类的面试题。
  • 操作系统面试知识点总结 参考资料:《程序员面试宝典 第5版》《操作系统概念》
  • 操作系统面试基本概念操作系统面试基本概念1 并发2 临界资源3 文件物理结构4 段表5 页表6 高级调度7 静态优先权8 进程控制块9 段页式存储管理 操作系统面试基本概念 1 并发 1.1 基本含义 在操作系统中,并发是指一...
  • 介绍了计算机操作系统面试常见知识点
  • 操作系统面试知识点总结

    万次阅读 多人点赞 2016-07-12 10:20:39
    操作系统面试知识点总结
  • 操作系统面试重难点总结  一、操作系统知识点图谱 二、面试问题总结 参考:面试复习重点——基础篇:操作系统、计算机网络、设计模式 操作系统的四个特性。操作系统的主要功能。进程的有哪几种...
  • 操作系统面试题 1、进程和线程的区别? 解析:(1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元 (2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),...
  • 面试/笔试第二弹 —— 操作系统面试问题集锦

    万次阅读 多人点赞 2017-10-21 16:08:50
    本文对面试/笔试过程中经常会被问到的一些关于操作系统的问题进行了梳理和总结,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。关于这块内容的初步了解和整体掌握,建议大家读一读...
  • 操作系统面试题总结

    2017-04-17 12:01:08
    这篇博客是对操作系统面试题做个总结,会持续更新 1. 线程与进程的区别  进程是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。而线程是进程的一部分,...
  • 操作系统面试题整理

    千次阅读 2015-08-09 16:17:54
    操作系统面试题整理 1、感知进程存在的唯一标志是:进程控制块PCB。 2、访问临界资源应遵循的准则是:空闲让进、忙则等待、有限等待、让权等待。 3、一个批处理型作业,从进入系统并驻留在外存的后备队列...
  • 操作系统面试题汇总

    2015-09-25 15:59:51
    操作系统面试必考知识点,但是我这里只给了一部分的总结,主要是操作系统的三个主要章节的问题的汇总,就是进程线程、内存管理和死锁这三章。
  • 操作系统面试(内存管理) 虚拟内存 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个...
  • 操作系统面试题目

    2018-02-27 12:49:27
    有过面试经历的人都知道操作系统面试官必问的几大类型题目之一,在上一期我们已经更新另一大板块的题目常见面试题整理--数据库篇这一期文章,我们将继续更新操作系统相关的面试题,希望可以给需要面试...

空空如也

1 2 3 4 5 ... 20
收藏数 10,492
精华内容 4,196
关键字:

操作系统面试