操作系统(二)

  1. 在多重处理系统中,处理死锁的办法有两种:一是防止其发生,二是发生后进行处理。
  • 所谓死锁deadlocks 是指两个或者两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们将推进下去。此时称系统处于死锁状态或者系统产生了死锁。
  • 产生死锁的四个必要条件:
    • …互斥条件: 一个资源每次只能被一个进程使用。
    • …请求与保持条件: 一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    • …不剥夺条件: 进程已获得的资源,在未使用之前,不能强行剥夺
    • …循环等待条件: 若干进程之间形成一种头尾相接的循环等待资源关系
      只要发生死锁,这些条件必然成立。只要上面条件之一不满足,就不会发生死锁。为此可以采用下面三种措施:
    • 采用资源静态分配策略-----破坏“部分分配”条件
    • 允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥夺”条件。
    • 采用资源有序分配法----破坏“环路”条件。
    • 这里注意:互斥条件无法被破坏。
  1. fork英文单词是叉的意思。意思是进程在这里开始分叉,分成了两个进程:一个是父进程一个是子进程。子进程复制了父进程的绝大部分:栈、缓冲区等等。系统为子进程创建一个新的进程表项,其中进程id和父进程是不相同的,父子进程成为两个独立的进程,虽然父子进程共享空间,但是在涉及写数据时子进程有自己的数据空间,再有数据修改时,系统会为子进程申请新的页面。

  1. 描述进程的三种状态:
  • 进程在运行过程中不断改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。
  • 1 >就绪(Ready)状态:当进程与分配到除CPU以外的所有必要资源时,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
  • 2>执行(Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的状态称为执行状态。
  • 3>阻塞(Blocked)状态:正在执行的过程中,由于等待某个事件而无法执行时,便放弃处理机处于阻塞状态。引起阻塞的事件有多种----等待I/O完成、申请缓冲区不能满足、等待信号等。

线程篇

  1. 请描述进程与线程的区别:
  • 进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。在一个多任务环境中下面的概念帮助我们理解两者差别。
  • 进程间是独立的,这表现为内存空间、上下文环境;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。
  • 同一进程中的两段代码不能够同时执行,除非引入线程。
  • 线程属于进程,当进程退出时,该进程产生的线程都会被强制退出并清除。线程占用的资源少于进程占用资源。进程和线程都可以有优先级。
  • 进程间可以通过IPC通信,但线程不可以。

  1. PE 文件被称为可移植的执行体Portable Execute的全程,常见的EXE、DLL、OCX,SYS、COM都是·PE文件,PE文件是windows操作系统上的程序文件(可能是间接被执行,如 DLL(动态链接库文件))。
  2. Windows平台的大多数程序都是使用各种动态链接库(DLL)来避免重复实现功能。操作系统为每个程序加载了若干个DLL。当程序不使用绝对位置时,使用默认的搜索顺序来找到它。默认情况:操作系统使用下面的顺序搜索DLL:
  • 内存
  • KnownDLLs
  • 清单与.local
  • 应用程序目录
  • 当前工作目录
  • 系统目录
  • 路径变量
    包含EXE文件目录 ->进程的当前工作目录->windows系统目录->windows目录->列在Path环境变量中的一系列目录。

  1. 动态链接库相对静态连接库的优点有:节省内存,减少交换操作,节省磁盘空间,更易于升级(不需要重链接和重编译)。静态链接库可能比动态链接库更快。

内存管理


  • 抖动现象(Thrashing)是指刚刚被换出的页很快又要被访问。
  • 采用FIFO算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。
    Belady现象的描述:一个进程P要访问M个页,OS分配N(N<M)个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N).当N增大(且N小于M)时,PE(S, N)时而增大,时而减小。
    FIFO是最早出现的页置换算法之一。Belady现象的原因是FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的,因而FIFO并不是一个好的置换算法。
  • 虚拟存储的基本思想是:程序、数据、堆栈的总大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中。而把其他未被使用的部分保存在磁盘。

猜你喜欢

转载自blog.csdn.net/qq_22613757/article/details/83903444