zoukankan      html  css  js  c++  java
  • 操作系统面试题(一)

    1.进程与线程的区别与联系、进程和程序的区别

      进程与线程:

      进程是操作系统资源分配与调度的独立单位,线程是CPU调度和分配的基本单位。

      线程是进程的一部分,一个没有线程的进程叫单线程的,有多个线程的进程叫做多线程,线程又叫做轻量级的进程

      操作系统为进程分配资源,但不会为线程分配资源,线程使用所属进程的资源,进程与进程之前资源是不共享的,线程组之间是共享所属进程的资源

      进程控制有PCB表,线程控制有TCB表,但是线程表中的状态要比进程表少很多

      进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,

       在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,

      但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,

      但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程

      进程和程序:

      程序是指令的集合,是静态的概念;进程是程序在处理机上的一次执行过程,是动态概念(进程有生命周期)

      进程是一个独立的运行单位,可以与其他进程并行活动,程序则不是。

      进程是竞争计算机系统有限资源的基本单位,也是处理机调度的基本单位。

      进程具有创建其他进程的功能,而程序没有

    2.Windows下的内存是如何管理的

      Windows进行内存管理的三种方法

        虚拟内存  最适合用来管理大型对象或者结构数组;

        内存映射文件 最适合用来管理大型数据流以及在单个计算机上多个进程之间共享数据;

        内存堆栈    最适合管理大量的小对象

      操纵内存可以分为两个层面  物理内存 虚拟内存

        物理内存由操作系统管理,不允许应用程序直接访问,内存分配是通过堆分配的,

        对于每个进程都有自己的默认堆,当一个堆创建的后,就通过虚拟内存操作保留了相应大小的地址块,

        当在堆上分配一个块内存时,系统在堆的地址表找到一个空闲块,为这个空闲块所包含的所有内存页提交物理对象。

        这个时候就可以访问了。

    3.Windows消息调度机制

      消息队列

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

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

      操作系统在工作时,其各种资源可以根据需要随时进行动态分配。由于各种资源可以进行动态分配,因此其处理事务的能力较强、速度较块

    5.中断和轮询的特点

      I/O设备的程序轮询方式是早期计算机系统对I/O设备的一种管理方式。它定时堆各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的

      则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度快得多,所以一般不会发生不

      能及时处理的问题。轮询方式,处理机的输入输出设备的数量是有限制的。而且程序轮询占据了CPU相当一部分处理时间,效率低下

      中断是在CPU在正常运行程序的过程中,由于发生了随机的内部或外部事件,使CPU中断正在运行的程序,而转到为相应的服务程序区处理

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

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

    6.临界区、如何解决冲突

      临界区:

      临界资源:一次只运行一个进程使用的资源叫临界资源

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

      解决冲突

      临界区只能一次进入进程,其他进程必须等待

      进入临界区的进程要在有限时间内退出,以便其他进程能及时进入临界区

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

    7.分段、分页(内存管理)

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

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

      页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。

      段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序   进行编辑时,根据信息的性质来划分。

      分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,

      即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

    8.进程通信方式

      管道通信、消息通信、内存共享

    9.保持进程同步的方法

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

    10.Linux常用的命令

      显示文件目录命令 ls

      改变当前目录命令 cd

      建立目录 mkdir

      删除目录 rmdir

      删除文件命令 rm

      文件复制命令 cp

      或者帮助信息 man 

      显示文件内容 less

    11.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

    12.UNIX显示文件夹中文件名的命令是什么?能使文件内容显示在屏幕的命令是什么?

       ls cat

       type tail 

    13.makefile文件的作用是什么

      一个工程的源文件很多,按照类型、功能、模块放在若干目录中,makefile定义了一系列的规则来制定,哪些文件需要先编译

      哪些文件需要后编译,甚至更多复杂的功能操作,因为makefile就像一个shell脚本一样,其中也可以执行操作系统的命令

      makefile -自动化编译,一旦写好,可只需要一个make命令,整个工程完全自动化编译,提供了软件开发效率

    14.什么是缓冲区溢出?有什么危害?其原因是什么?

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

      危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。

      而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,

      带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

      通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。

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

    15.中断、中断时CPU做什么工作

      所谓中断是指CPU对系统发生的某个事件做出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去

      执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

      中断类型:

        1.中断:CPU以外的事件引起的中断:比如时钟中断、I/O中断

        2.异常:来自CPU的内部事件或者程序执行中的事件引起的过程,比如CPU本身故障、程序故障

      中断处理过程:

        中断响应、中断处理

    16.进程的几种状态

       Running(运行) Ready(就绪) Wait(等待)

       Running(运行) :进程已获得运行所必需的资源,正在处理机上执行

         Ready(就绪):进程已获得除CPU之外的运行所必需的资源

       Wait(等待):进程正在等待某个事件的发生而暂停运行,这时,即使给CPU时间也无法执行

       状态转化:

       

    17.堆和栈区别

      栈区—由编译器自动分配释放,存放函数的参数值,局部变量的值等

      堆区—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,栈区由链表组成,分配方式也类似于链表。

      区别:

      1.管理方式不同:对于栈,由编译器自动管理,无须手动控制;对于堆,释放工作由程序员控制,容易产生内存泄露

      2.空间大小不同:在32位系统,堆内存可以达到4G,从用户角度讲,堆内存的使用基本上没有什么限制;对于栈,一般有

        固定的空间大小,每个程序编译完成后,其栈空间大小就定了

      3.能否产生碎片:对于堆,频繁new/delete会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低。

        对于栈,不会有碎片产生,因为栈是后进先出的队列

      4.生长方向不同

        对于堆,生长是向上的,也就是说向着内存地址增加的方向;对于栈,它的生长方向是向下的,是向着内存地址减小的方向增长。

        栈是一种线性结构,堆是一种链式结构,进程中每个线程都有自己私有的栈

      5.分配方式不同

        堆都是动态分配的。栈有两种分配方式:静态分配和动态分配。

        静态分配是编译器完成的,比如局部变量的分配。动态分配又malloc函数进行分配,但是栈的动态分配和堆是不同的,它的动态分配

        是有编译器进行释放的。

      6.分配效率不同  

        CPU分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行(计算机在底层对栈提供支持),效率比较高

        堆则是由c/c++库函数提供的,是内存中不连续的地址空间通过链表的方法链接在一起的。堆的效率比栈要低得多。

    18.P、V操作

       P申请资源  V释放资源

    19.死锁,条件是什么?怎样避免死锁?

       死锁:指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象

       条件:互斥条件、请求和保持条件、不剥夺条件、环路等待条件

       避免死锁:预防死锁、避免死锁、检测死活、解除死锁

         预防死锁:

        有序资源分配法按某种规则系统中的所有资源统一编号、对它所必须使用的而且属于同一类的所有资源,必须一次申请完、在申请不同类资源时,必须按各类设备的编号依次申请

         银行家算法该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。

         当死锁已经产生的时候,解除死锁

       1.撤销陷与死锁的全部进程

       2.逐个撤销陷在死锁的进程,直到死锁不存在

         3.从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失

       4.从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

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

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

    21. 静态编译与动态编译的区别

      动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

     

      静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补

    22. Linux进程间的通信主要方式:

    1.管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程见的亲缘关系通常是指父子进程关系。

    2.有名管道:半双工的通信方式,但是允许无亲缘关系的进程间的通信

    3.信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。

    它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段

    4.消息队列:消息队列是由消息的链表存放在内核中并由消息队列标识符标识。消息队列客服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等特点。

    5.信号:信号时一种比较复杂的通信方式,当某个事件发生时,用于通知起接收进程

    6.共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最开的IPC方式,它是针对其他进程间通信

    方式效率低而专门设计的。它往往与其他通信机制配合使用,来实现进程间的同步和通信。

    7.套接字:套接字也是一种进程间的通信机制,与其他通信机制不同的是,他可用于不同机器之间的通信。

  • 相关阅读:
    Dojo初探之5:dojo的request(请求)操作、请求过程事件绑定和隐藏数据data()操作(基于dojo1.11.2版本)
    Dojo初探之4:dojo的event(鼠标/键盘)事件绑定操作(基于dojo1.11.2版本)
    为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?
    Dojo初探之3:dojo的DOM操作、query操作和domConstruct元素位置操作(基于dojo1.11.2版本)
    nodejs实战:使用原生nodeJs模块实现静态文件及REST请求解析及响应(基于nodejs6.2.0版本,不使用express等webMVC框架 )
    Dojo初探之2:设置dojoConfig详解,dojoConfig参数详解+Dojo中预置自定义AMD模块的四种方式(基于dojo1.11.2)
    Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)
    POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
    Lucene全文搜索之分词器:使用IK Analyzer中文分词器(修改IK Analyzer源码使其支持lucene5.5.x)
    搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)
  • 原文地址:https://www.cnblogs.com/daimingming/p/3271840.html
Copyright © 2011-2022 走看看