计算机操做系统基础知识-2

Shell

  1. Shell是操做系统与用户交互的界面。表现为经过控制台执行用户命令。自己不执行命令,仅仅是组织和管理命令。
  2. 脚本:相似程序的方式执行一系列的逻辑顺序的命令序列完成复杂的功能和人机交互。保存在文件中,是shell命令的集合。

系统调用

  1. 定义:操做系统内核为应用程序提供的服务/函数
  2. 特色:
    • 通常涉及核心操做和硬件资源
    • 运行于核态
    • 函数具备惟一ID
    • 产生中断,且为自愿中断

进程管理

  1. 定义:是程序在某个数据集合上的一次运行活动。程序的一次运行即为一个进程。
  2. 特性:
    • 动态性
    • 并发性
    • 异步性
    • 独立性
  3. 分类:
    按使用资源权限
    • 系统进程:系统内核相关进程
    • 用户进程:运行于用户态的进程
      按对CPU依赖性
    • 偏CPU进程:计算型
    • 偏I/O进程:
  4. 进程状态
    • 就绪态:得到了除CPU以外全部资源,一般有多个进程处于就绪态,有一个就绪队列。
    • 运行态:得到CPU,正在运行
    • 等待态:

进程控制块

进程由程序、数据、进程控制块组成。
进程控制块是描述和管理进程的一种数据结构,包括如下内容:shell

  • 进程描述信息
  • 控制和调度信息
  • 资源信息
  • 现场信息

进程互斥和同步

  1. 同步:进程经过协做共同完成同一任务而形成的直接制约关系,如生产者-消费者模式
  2. 互斥:进程间竞争系统资源而形成的间接制约关系,同一时间内只有一个进程能够访问系统资源。
  3. 临界资源和临界区
    • 临界资源:同一时间只能有一个进程访问的资源
    • 临界区:进程访问临界资源的程序片断
  4. 实现同步互斥的方法:原子操做、锁、信号量。
  5. 信号量同步机制
    • 信号量是一种特殊的变量,只能被两种操做修改,即P、V操做。
    • P操做:s=s-1;if(s < 0) block();一个进程得到资源访问权,s-1,当s小于0时说明资源不能再被更多进程访问了,会将进程变为等待状态,加入等待队列。P操做用于申请资源。
    • V操做:s=s+1;if(s<=0) wakeup();一个进程释放了该资源的访问,此时会唤醒一个正在等待的进程。若是s大于0则表示没有进程等待该资源。V操做用于释放资源。
  6. P、V操做实现互斥
    • 将信号量s值设为1,表示同一时间只有一个进程能使用资源。
  7. P、V操做实现同步
    • 使用两个信号量表示缓冲区的读写,实现生产者-消费者模式。
  8. 死锁
    • 通俗来说死锁就是进程1先占用了A资源,申请B资源,而进程2先占有了B资源,申请A资源,这样就会形成两个进程都在等待对方已占用的资源而一直循环下去的状况。
    • 死锁产生条件:
(1)资源互斥,同一时间只有一个进程能访问
(2)资源不可剥夺,除非进程主动放弃
(3)资源的保持和请求,进程在占有某一资源后还能申请其余资源
(4)对资源的循环等待。
  • 死锁解决:破坏上述四个条件之一便可。
(1)预防:即对资源进行适当的限制
(2)检测:在运行过程当中随时检测死锁条件,并设法避开
(3)恢复:发生死锁后以最小代价退出死锁状态。

一般预防会使得程序运行效率下降,没法充分利用资源。检测则会耗费大量的系统开销,效率低。通常系统都采用恢复措施。Linux系统也可能会发生死锁现象,可是几率极低,所以系统采用“鸵鸟策略”,并不去检测和解除死锁,而是忽略。缓存

进程通讯

进程有本身独立的地址空间,所以进程间须要交换数据时须要经过某种手段,这就是进程通讯。安全

  1. 通讯方式:信号量、信号、管道、共享内存、消息
    • 高级通讯:消息、管道、共享内存。能够传递大量数据
    • 低级通讯:信号量、信号。只能传递少许数据。
    • 同步通讯:管道、共享内存。通讯双方须要共同参与到整个通讯过程当中,步调协调地完成数据交换。如同打电话同样,双方必须同时在线,即时交谈。
    • 异步通讯:信号量、信号、消息。双方进程不用考虑对方进程,发完或者接受完数据就好。如同发邮件,没必要关心对方是什么时候接收。
  2. 信号量:
  3. 信号: 进程间能够发送控制信息,通常只有几个字节数据,通知进程某个事件发生。
  4. 管道:两个进程之间数据传输通道,一个发,一个接,同步的传递字节流。管道是经过文件系统实现的。Linux将管道看作是一种特殊的文件系统,而实际上它是一个虚拟文件的形式实现内存高速缓存区。管道文件创建后由两个进程共享,一个写,一个读。
  5. 消息队列:消息是结构化的数据。
  6. 共享内存:在内存中开辟一个进程共享的存储段,将这个区间映射到不一样进程的地址空间中。一旦涉及到共享就要考虑同步问题,保证共享数据的安全性,所以实现较为复杂。

线程

  1. 为何须要线程?
    进程能够并发执行,可是进程内最是串行执行的,没能充分利用CPU资源。此外,进程的建立和切换对于资源的开销都比较大,影响了系统的总体效率。为了提升系统运行的效率,提出了线程这个概念。
  2. 进程和线程比较
    • 资源分配方面:进程是资源分配的最小单位,每个进程都有本身独立的地址空间,以及相关的资源。而线程则共享进程内的地址空间和资源。所以进程的创建开销较大。
    • CPU调度方面:线程是CPU调度的最小单位。进程在切换时,须要保存现场,即整个进程的运行环境,须要的开销较大。而线程的切换则只须要保存少许寄存器,开销小,于是切换速度快。
    • 通讯方面:因为进程有本身独立的地址空间,其余进程没法访问,所以通讯须要系统提供的进程通讯机制完成。而线程共享进程内的资源,通讯较为简单。
  3. Linux线程
    • Linux线程实现较为独特,它没有专门的线程概念,其实是把线程当作进程来处理的,只不过该进程要和其余进程共享地址空间等资源。所以Linux线程也称为“轻量级进程”(LWP)。
    • 建立线程有clone()函数完成,于fork函数不一样的是,它须要指定共享的资源。
相关文章
相关标签/搜索