操作系统面试题总结

2023-11-17

1、线程与进程的区别联系

2、进程通信方式有哪些?

3、同步的方式有哪些?

4、ThreadLocal与其它同步机制的比较

5、进程死锁的条件

 

第一题:

(1)线程是进程的一个实体,一个进程可以拥有多个线程,多个线程也可以并发执行。一个没有线程的进程也可以看做是单线程的,同样线程也经常被看做是一种轻量级的进程。并且进程可以不依赖于线程而单独存在,而线程则不然。

(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程更小的能够独立执行的基本单元,线程自己不拥有任何系统资源,但是它可以访问其隶属进程的全部资源。

(3) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表少得多。

进程的作用与定义:是为了提高CPU的执行效率,为了避免因等待而造成CPU空转以及其他计算机硬件资源的浪费而提出来的。

线 程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以创建父进程和多个子进 程的方式来进行处理,但是创建一个进程要花费较大的系统开销和占用较多的资源。除外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换 是一个复杂的过程。所以,为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了"线程(thread)"的概念。

 

第二题:

进程间通讯的方式:

  • 管 道中还有命名管道和非命名管道之分,非命名管道只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先 进先出的通讯方式。FIFO是一种先进先出的队列。它类似于一个管道,只允许数据的单向流动。每个FIFO都有一个名字,允许不相关的进程访问同一个 FIFO,因此也成为命名管。
  • 消息队列:是用于 两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列 中取数据。需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中 写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!!!
  • 信号量, 不能传递复杂消息,只能用来同步
  • 共享内存,只要首先创建一个共享内存区,其它进程按照一定的步骤就能访问到这个共享内存区中的数据,当然可读可写;

几种方式的比较:

  • 管道:速度慢,容量有限
  • 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
  • 信号量:不能传递复杂消息,只能用来同步
  • 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了一块内存的。

 

第三题:

线程同步指多个线程同时访问某资源时,采用一系列的机制以保证同时最多只能一个线程访问该资源。线程同步是多线程中必须考虑和解决的问题,因为很可能发生多个线程同时访问(主要是写操作)同一资源,如果不进行线程同步,很可能会引起数据混乱,造成线程死锁等问题;

线程同步的方式:

  • 临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问
  • 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会同时被多个线程访问
  • 信号量:它允许多个线程同一时刻访问同一资源,但是需要限制同一时刻访问此资源的最大线程数目。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中PV操作相似。
  • 事件(信号):通过通知操作的方式来保持多线程的同步,还可以方便的实现多线程的优先级比较的操作

总结比较: 

  • 互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
  • 互 斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与 数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以可以使用 WaitForSingleObject来等待进程和线程退出。
  • 通 过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可 的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象 可以说是一种资源计数器。

第四题:

Threadlocal 和其他所有的同步机制都是为了解决多线程中的对同一变量的访问冲突,在普通的同步机制 中,是通过对对象加锁来实现多个线程对同一变量的安全访问的。这时该变量是多个线程共享的,使用这种同步机制需要很细致的分析在什么时候对变量进行读写, 什么时候需要锁定某个对象,什么时候释放该对象的索等等。所有这些都是因为多个线程共享了该资源造成的。Threadlocal就从另一个角度来解决多线程的并发访问,Threadlocal会为每一个线程维护一个和该线程绑定的变量副本,从而隔离了多个线程的数据共享,每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

总结:当 然ThreadLocal并 不能替代同步机制,两者面向的问题领域不同。同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式;而 ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源(变量),这样当然不需要对多个线程进行同步了。所以,如果你需要 进行多个线程之间进行通信,则使用同步机制;如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal,这将极大地简化你的程序,使程序更加 易读、简洁。

第五题:

首先回答死锁的定义,所谓死锁就是一个进程集合中的多个进程因为竞争资源,而造成的互相等待现象。

死锁的原因:系统资源不足;多个进程的推进顺序不合理

死锁的必要条件:

  • 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
  • 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
  • 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
  • 循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。

处理死锁的策略:

  • 忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的情况下。传说中,鸵鸟看到危险就把头深埋地下,这是显然是一种很消极的策略。
  • 检测死锁并且恢复。
  • 通过对资源有序分配,以避免循环等待的“环路”发生。
  • 通过破坏死锁的必要条件,来防止死锁的产生。

 

 

 

操作系统常见面试题(答案仅供参考)
1.    什么是中断?中断时CPU做什么工作?
          中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
 
2.    CPU在上电后,进入操作系统的main()之前必须做什么?
      加电后,会触发CPU的reset信号,导致CPU复位,然后CPU会跳到(arm下0x00000000,x86下0xfffffff0)执行指令.主 要是做CPU初始化,确定CPU的工作模式,mmu初始化。建立页表段表,初始化中孤单控制器和中断向量表,初始化输入和输出,初始化 nandflash,把OS的TEXT区加载到sdram,然后跳转到sdram的main()
 
3.    简术ISO OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。
      网络层:资料传送的目的地寻址,再选择出传送资料的最佳路线;
链路层:负责网络上资料封包如何传送的方式;
物理层:在设备与传输媒介之间建立及终止连接。参与通讯过程使得资源可以在共享的多用户中有效分配,对信号进行调制或转换使得用户设备中的数字信号定义能与信道上实际传送的数字信号相匹配
 
4.    makefile文件的作用是什么?
            一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后 编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个 make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大 多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
 
5.    UNIX显示文件夹中文件名的命令是什么?能使文件内容显示在屏幕的命令是什么?
       ls cat
type tail
6.    Linux文件属性有哪些?(共十位)
       -rw-r--r—1
           第一个属性代表这个文件是【目录、文件或连结文件】,当为[ d ]则是目录,为[ - ]则是文件,若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备;
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。
       接下来的属性中,三个为一组,且均为【rwx】三个参数的组合,其中[r]代可读、
[w]代表可写、[x]代表可执行:
第一组为【拥有人的权限】,
 第二组为【同群组的权限】;
 第三组为【其它非本群组的权限】。
7.    Linux中常用到的命令
      显示文件目录命令ls
      改变当前目录命令cd  如cd / /home
      建立子目录mkdir  mkdir xiong
      删除子目录命令rmdir  如 rmdir /mnt/cdrom
      删除文件命令RM  如 rm /ucdos.bat
      文件复制命令cp   如 cp /ucdos/* /fox
      获取帮助信息命令man 如 man ls
      显示文件的内容less 如 less mwm.lx
      重定向与管道type 如type  readme>>direct,将文件readme的内容追加到文direct中
8.    进程通信有哪些方式?
    管道通信、消息通信、内存共享
9.    说说分段和分页。
         页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。
    段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。页的大小固定且由系统确定,把逻辑地址划分为页号和页内 地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。 段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
    分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址
10.什么是进程和线程?有何区别?
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.
线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
11.Windows下的内存是如何管理的?
Window操纵内存可以分两个层面:物理内存和虚拟内存。  
      其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一    个2G地址空间,而内存分配是通过堆进行的,对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内 存,系统消耗很小),当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小)为这个空闲块所包 含的所有内存页提交物理对象(物理内存上或硬盘上的交换文件上)。这时可以就访问这部分地址了。提交时,系统将对所有进程的内存统一调配,如果物理内存不 够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留 地址空间。  
如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状VirtualQuery),如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一 个  软件异常。此外有些内存页可以设置各种属性。如果是只读,向内写也会产生软件异常
12.操作系统的内容分为几块?什么叫做虚拟内存?优点管理属于操作系统的内容吗?
13.进程是一个比较重要的概念,那么进程有哪几种状态?
     基本状态有3种,即ready(就绪),running(运行),wait(等待).
14.说出你所知道的保持进程同步的方法?
    进程间同步的主要方法有内存屏障,互斥锁,信号量和锁,管程,消息,管道
15.OS中如何实现物理地址到逻辑志址的转换?
16.解释一下分页式管理。
          用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配.
17.什么是死锁,其条件是什么?怎么避免死锁?
         死锁是指,在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它们现在保持着的资源,否则就不能向前推进.此时,每个进程都占用了 一定的资源但是又不能向前推进,称这一组进程产生了死锁. 通俗的讲,就是两个或多个进程无止境的等候着永远不会成立的条件的一种系统状态. 其条件是为
1.互斥:存在这样一种资源,它在某个时刻只能被分配给一个执行绪使用;
2.持有:当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;
3.不可剥夺:执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源;
4.环形等待:若干执行绪以不同的次序获取互斥资源,从而在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。
避免死锁:按顺序访问,事务最小化
 
18.什么是缓冲区溢出?有什么危害?其原因是什么?
         缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,
危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数
19.什么是临界区?如何解决冲突?
          每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。
① 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
② 任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
③   进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
④   如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
20.解释一下P操作与V操作。
      P就是请求资源,V就是释放资源
21.中断和轮询的特点。

 

 

 

1、什么是进程(Process)和线程(Thread)?有何区别?

   进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和 分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和 栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

  进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。

  2、Windows下的内存是如何管理的?

  Windows提供了3种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者结构数组;内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。

  Windows操纵内存可以分两个层面:物理内存和虚拟内存。

   其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过堆进行的。对于每个进程都有自己的默认堆,当 一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲 块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以 访问这部分地址。提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释 放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。

  如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常。

  3、Windows消息调度机制是?

  A)指令队列;B)指令堆栈;C)消息队列;D)消息堆栈

  答案:C

   处理消息队列的顺序。首先Windows绝对不是按队列先进先出的次序来处理的,而是有一定优先级的。优先级通过消息队列的状态标志来实现的。首先,最 高优先级的是别的线程发过来的消息(通过sendmessage);其次,处理登记消息队列消息;再次处理QS_QUIT标志,处理虚拟输入队列,处理 wm_paint;最后是wm_timer。

  4、描述实时系统的基本特性

  在特定时间内完成特定的任务,实时性与可靠性。

  所谓“实时操作系统”,实际上是指操作系统工作时,其各种资源可以根据需要随时进行动态分配。由于各种资源可以进行动态分配,因此,其处理事务的能力较强、速度较快。

  5、中断和轮询的特点

   对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的, 则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度要快得多,所以一般不会发生不能及时处理的 问题。当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此,程序轮询是一种效率 较低的方式,在现代计算机系统中已很少应用。

  程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预先安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为响应的服务程序去处理。

  轮询——效率低,等待时间很长,CPU利用率不高。

  中断——容易遗漏一些问题,CPU利用率高。

 6、什么是临界区?如何解决冲突?

  每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。

  (1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入;

  (2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;

  (3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区;

  (4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

  7、说说分段和分页

  页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。

  段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。

  页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

  分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

  8、说出你所知道的保持进程同步的方法?

  进程间同步的主要方法有原子操作、信号量机制、自旋锁、管程、会合、分布式系统等。

  9、Linux中常用到的命令

  显示文件目录命令ls        如ls

  改变当前目录命令cd        如cd /home

  建立子目录mkdir           如mkdir xiong

  删除子目录命令rmdir       如rmdir /mnt/cdrom

  删除文件命令rm            如rm /ucdos.bat

  文件复制命令cp            如cp /ucdos /fox

  获取帮助信息命令man      如man ls

  显示文件的内容less        如less mwm.lx

  重定向与管道type          如type readme>>direct,将文件readme的内容追加到文direct中

10、Linux文件属性有哪些?(共十位)

  -rw-r--r--那个是权限符号,总共是- --- --- ---这几个位。

   第一个短横处是文件类型识别符:-表示普通文件;c表示字符设备(character);b表示块设备(block);d表示目录 (directory);l表示链接文件(link);后面第一个三个连续的短横是用户权限位(User),第二个三个连续短横是组权限位 (Group),第三个三个连续短横是其他权限位(Other)。每个权限位有三个权限,r(读权限),w(写权限),x(执行权限)。如果每个权限位都 有权限存在,那么满权限的情况就是:-rwxrwxrwx;权限为空的情况就是- --- --- ---。

  权限的设定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:

  一个文件aaa具有完全空的权限- --- --- ---。

  chmod u+rw aaa(给用户权限位设置读写权限,其权限表示为:- rw- --- ---)

  chmod g+r aaa(给组设置权限为可读,其权限表示为:- --- r-- ---)

  chmod ugo+rw aaa(给用户,组,其它用户或组设置权限为读写,权限表示为:- rw- rw- rw-)

  如果aaa具有满权限- rwx rwx rwx。

  chmod u-x aaa(去掉用户可执行权限,权限表示为:- rw- rwx rwx)

  如果要给aaa赋予制定权限- rwx r-x r-x,命令为:

  chmod u=rwx,go=rx aaa

  11、makefile文件的作用是什么?

   一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要 后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”。一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发的效率。make是 一个命令工具,是一个解释makefile中指令的命令工具。一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

  12、简术OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。

  网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。

  链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

  物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

  13、什么是中断?中断时CPU做什么工作?

  中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。

  14、你知道操作系统的内容分为几块吗?什么叫做虚拟内存?他和主存的关系如何?内存管理属于操作系统的内容吗?

   操作系统的主要组成部分:进程和线程的管理,存储管理,设备管理,文件管理。虚拟内存是一些系统页文件,存放在磁盘上,每个系统页文件大小为4K,物理 内存也被分页,每个页大小也为4K,这样虚拟页文件和物理内存页就可以对应,实际上虚拟内存就是用于物理内存的临时存放的磁盘空间。页文件就是内存页,物 理内存中每页叫物理页,磁盘上的页文件叫虚拟页,物理页+虚拟页就是系统所有使用的页文件的总和。

 15、线程是否具有相同的堆栈?dll是否有独立的堆栈?

  每个线程有自己的堆栈。

   dll是否有独立的堆栈?这个问题不好回答,或者说这个问题本身是否有问题。因为dll中的代码是被某些线程所执行,只有线程拥有堆栈。如果dll中的 代码是exe中的线程所调用,那么这个时候是不是说这个dll没有独立的堆栈?如果dll中的代码是由dll自己创建的线程所执行,那么是不是说dll有 独立的堆栈?

  以上讲的是堆栈,如果对于堆来说,每个dll有自己的堆,所以如果是从dll中动态分配的内存,最好是从dll中删除;如果你从dll中分配内存,然后在exe中,或者另外一个dll中删除,很有可能导致程序崩溃。

  16、什么是缓冲区溢出?有什么危害?其原因是什么?

  缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

   危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢 出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服 务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序 的堆栈,使程序转而执行其它指令,以达到攻击的目的。

  造成缓冲区溢出的主原因是程序中没有仔细检查用户输入的参数。

  17、什么是死锁?其条件是什么?怎样避免死锁?

  死锁的概念:在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。

  死锁产生的原因主要是:? 系统资源不足;? 进程推进顺序非法。

  产生死锁的必要条件:

  (1)互斥(mutualexclusion),一个资源每次只能被一个进程使用;

  (2)不可抢占(nopreemption),进程已获得的资源,在未使用完之前,不能强行剥夺;

  (3)占有并等待(hold andwait),一个进程因请求资源而阻塞时,对已获得的资源保持不放;

  (4)环形等待(circularwait),若干进程之间形成一种首尾相接的循环等待资源关系。

  这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

   死锁的解除与预防:理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如 何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的 分配要给予合理的规划。

  死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与恢复策略。

 本文摘自点击打开链接,感谢原作者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统面试题总结 的相关文章

  • Oracle 高CPU SQL查找

    先top命令 找到PID 再在SQL界面用管理员权限查询 select sql text spid v session program process from v sqlarea v session v process where v s
  • 史上最全的CSS hack方式一览

    http blog csdn net freshlover article details 12132801
  • charge用法

    I mean I can stop charging anytime I want 老友记 第一季 第一集 我的意思是 我可以随时忍住挥霍 及物动词 vt 1 索价 对 索费 课 税 O1 for This store often char
  • socket超时设置 之 ioctlsocket 函数全面解析

    先看看MSDN标准解释 int ioctlsocket SOCKET s long cmd u long FAR argp Parameters s in Descriptor identifying a socket cmd in Com
  • SVN客户端安装及使用

    SVN客户端安装及使用 安装svn客户端 svn常用命令 将指定仓库checkout到当前目录 添加指定文件 添加所有文件 提交文件 更新文件 更新当前目录所有文件 更新指定文件 删除文件 查看修改记录 查看当前目录的修改记录 查看某个文件
  • 车险保单在线OCR识别,字段很全,可以可以

    快瞳科技 车险保单识别 在线测试后发现 保险公司名称 保单号或者合同号 总保费 保险期间 业务类型 车型保单类型 保单名称 被保人信息 被保险人 被保人姓名 被保人证件号码 被保人电话号码 被保人联系地址 车辆信息 车牌 车辆种类 车辆使用
  • 二分查找4 - 搜索旋转排序数组

    搜索旋转数组 1 题目 整数数组 nums 按升序排列 数组中的值 互不相同 在传递给函数之前 nums 在预先未知的某个下标 k 0 lt k lt nums length 上进行了 旋转 使数组变为 nums k nums k 1 nu
  • 秒天秒地!黑马王炸学科,均薪18k+,最高42000元!

    掌握AI的同学 握住了高薪密码 黑马北京校区人工智能开发 16 班的就业炸了 毕业仅 7 个工作日 班级就业率便达到 65 班级均薪高达 18340 9 元 最高薪资更是冲到了 42k 班级就业详情数据 滑动沾高薪喜气 看完这无敌的就业喜报
  • Three.js使用OrbitControls后修改相机旋转方向无效

    1 问题复现 在项目中添加了OrbitControls控制器来控制相机的旋转和平移 但是需要修改初始的相机角度 于是我把相机的角度进行修改 如下 const camera new THREE PerspectiveCamera 75 vie
  • linux nginx 配置

    http blog csdn net Colton Null article details 78439174 locationNum 8 fps 1 之前发布过一篇如何在Tomcat中配置二级域名 现在发现几个月前的我太年轻了 哎 过几个
  • Leetcode算法——63、不重复路径II(unique paths II)

    一个机器人位于一个m n的网格的左上角 它每次只能向下或向右移动一格 它试图到达网格的右下角 网格中有一些障碍物 机器人不能通过 求有多少种不重复的路径 备注 1 m 和 n 都不大于 100 2 障碍物和空地分别被标为 1 和 0 示例
  • 如何开发一个小程序游戏?

    小程序游戏开发需要开发人员具备以下几点能力 有一定的编程基础 例如 JavaScript TypeScript 至少熟悉一种游戏开发引擎 比如 Cocos Unity等 对游戏机制 游戏系统有一定的理解 有一定的 UI 界面审美 能够开脑洞
  • 字典树Trie和三叉搜索树Ternary Tree的学习总结

    字典树Trie和三叉搜索树Ternary Tree的学习总结 出处 西西整理 作者 西西 日期 2012 12 31 2 39 04 大 中 小 评论 0 我要发表看法 Trie树 又称字典树 单词查找树或者前缀树 是一种用于快速检索的多叉
  • 第38讲 Android Camera2 API 通过CropRegion控制Zoom缩放

    本讲是Android Camera专题系列的第38讲 我们介绍Android Camera2 API专题的通过CropRegion控制Zoom缩放 包括如下内容 Android Zoom简介 如何查询当前Camera支持的Zoom能力 通过

随机推荐

  • pycharm中from,import文件/模块出现问题(最全方法)

    1 引用本地文件 如上图所示 在pycharm中可能会出现引用 本地项目文件夹中的 py文件出现问题的时候 这时我们需要考虑是否是IDE环境未将项目路径设置到引用环境变量中 有一下几种方法可以解决 1 这时可以通过sys path inse
  • iOS开源系列——OC框架排名列表

    Objective C框架排名 快点我
  • PRD文档范例,产品经理值得收藏的写作手册

    2015年 我写了一篇梳理PRD的文章 PRD到底该怎么写 获得3 5万次阅读 423次收藏 至今已过去5年 在这5年里 我一直从事产品产品相关的工作 也经历过一次完整的创业 对PRD又有了一些新的思考 这篇文章是 PRD怎么写 的升级版
  • 软件测试方法——静态测试与动态测试

    从测试方法的角度可以分为手工测试和自动化测试 1 静态测试 所谓静态测试 static testing 就是不实际运行被测软件 而只是静态地检查程序代码 界面或文档中可能存在的错误的过程 从概念中我们可以知道 其包括对代码测试 界面测试和文
  • Python re.match函数的使用详解

    正则表达式是用于匹配和操作文本的强大工具 在Python中 re模块提供了一组函数来处理正则表达式 其中 re match函数用于尝试从字符串的起始位置匹配一个模式 本文将详细介绍re match函数的使用方法 并提供相应的源代码示例 re
  • MiniDump不生成或者生成0字节

    今天在使用C写一个Windows多线程程序时 发现退出过程中有段错误 为了方便快速的定位问题 我使用了MiniDump MiniDump c源码如下 include
  • 2021年系统集成项目管理工程师(软考中级)连夜整理考前重点

    一 信息与信息化 1 信息论奠基者香农认为 信息就是能够用来消除不确定性的东西 8种状态需要3位比特表示 5位比特则可表示64种状态 信息 物质材料 能源是三大戓略资源 2 信息论两个层次 本体论和认识论 3 信息传输模型 信源 编码 信道
  • Qt鼠标单击与长按

    在Qt中 可以通过重载QWidget的mousePressEvent mouseReleaseEvent 和mouseMoveEvent 等事件来实现对鼠标事件的处理 判断鼠标是长按还是点击 可以通过记录鼠标按下的时间和释放的时间 通过两个
  • 15.DDT+unittest+excel ddt框架结合单元测试

    Excel读取数据的三种方式 1 一次性读取所有的数据 对内存的要求高点 必须掌握 2 需要用的时候读取所有的数据 就是磁盘读写要求高点 磁盘 速度最低 内存 速度中间 CPU 速度最高 3 使用DDT进行参数化 方法一 一次性读取所有的数
  • 缓存相关

    缓存雪崩怎么解决 如果缓存因为某个原因不可用 导致大量请求涌向数据库 可能会导致数据库崩溃 缓存雪崩目前主要有两种方案 1 使用集群 集群部署缓存 当一台宕机时 其他机器仍能提供缓存服务 2 Hystrix 熔断器 起到熔断 降级 限流三个
  • 文章内容无法复制复制不了

    一些文档 什么的复制不了 主要有几种方法 目录 1 禁用js 2 ctrl P打印 3 选中要复制的内容 gt 拖到网址输入框 另外 通过一些浏览器插件 感觉用处不大 1 禁用js 优点 可以直接复制原有段落文字的格式 缺点 有点麻烦 对百
  • 通俗理解三大范式

    关系型数据库中我们用的最多的就是第一范式 1NF 第二范式 2NF 第三范式 3NF 所以需要我们深入理解三大范式 第一范式 1NF 要求数据库的每一列都是不可分割的原子数据项 在上面的表中 家庭信息 和 学校信息 列均不满足原子性的要求
  • Windows下C语言操作硬件设备的方法

    本文作者 Fezl 本文原地址 http blog csdn net u010147522 article details 49912221 之前都是在linux下操作硬件设备 open read write ioctl 相当方便 最近要检
  • jQuery 入门教程(23): jQuery UI Autocomplete示例(一)

    AutoComplete 在获取焦点后 随着用户键入的内容 可以在预订的数据源中查找和已输入的内容相匹配的内容列表供用户选择 这可以用作之前输入过的内容也可以用作自动填充相关内容 比如根据城市名 自动填充邮编等 你可以使用本地数据源或是远程
  • nvm的安装及使用、下载cnpm以及git的配置

    nvm下载 下载图中安装包 下载完了就有这个 双击安装 路劲把C改为D即可 这是直接下载选择好安装路劲之后 没配置的环境变量 配置后的环境变量 1 文件夹设置 2 环境变量配置 查询nvm版本号 nvm常用命令如下 使用nvm下载 node
  • 适合初学者的强化学习教程(1): python使用gym实践和注意事项

    作者 知乎 Ai酱 安装步骤和报错问题 安装 pip install gym 报错 AttributeError module gym envs box2d has no attribute BipedalWalker 这是因为gym没有安
  • C语言for循环必备练习题

    话不多说 直接上题 笔者的一贯要求 速度 1 作业标题 663 关于while 条件表达式 循环体 以下叙述正确的是 假设循环体里面没有break continue return goto等等语句 作业内容 A 循环体的执行次数总是比条件表
  • 构造函数初始化列表

    目录 一 初始化列表 二 初始化列表的使用 三 注意 1 每个成员变量在初始化列表中只能出现一次 初始化只能初始化一次 2 类中包含以下成员 必须放在初始化列表位置进行初始化 3 尽量使用初始化列表初始化 因为不管你是否使用初始化列表 对于
  • ubuntu16.04上利用opencv目标跟踪工具实现8种目标跟踪

    一共八种工具 八种工具包括 BOOSTING Tracker 和Haar cascades AdaBoost 背后所用的机器学习算法相同 但是距其诞生已有十多年了 这一追踪器速度较慢 并且表现不好 但是作为元老还是有必要提及的 最低支持Op
  • 操作系统面试题总结

    1 线程与进程的区别联系 2 进程通信方式有哪些 3 同步的方式有哪些 4 ThreadLocal与其它同步机制的比较 5 进程死锁的条件 第一题 1 线程是进程的一个实体 一个进程可以拥有多个线程 多个线程也可以并发执行 一个没有线程的进