zoukankan      html  css  js  c++  java
  • 操作系统和进程

    1.什么是操作系统?

      首先我们来看看操作系统的作用,操作系统是管理硬件和软件资源的程序,它是计算机系统的内核和基础;

      说到程序,操作系统本质上就是运行在计算机上的软件程序;

      它与一般程序有什么不同,它为用户和系统提供了交互的操作界面(命令接口,程序接口,图形接口),我们直接操作计算机各种硬件资

      源和软件资源是很难的,有了操作系统,多了这一层中心层,我们不必关心具体的细节,只需要直接操作就好;

      操作系统分内核与外壳(我们可以理解为外壳是围绕这内核的应用程序,而内核可以理解为直接操作硬件的程序)。

    2.操作系统的特征

      并发:与并行对比。并发是一小段时间吃面包,一小段时间喝水;并行是左右开弓写字,两边同时开始。

      虚拟:把一个物理上的实体变成若干个逻辑上的对应物。物理实体是虚的,是实际存在的,而后者是虚的,是用户感觉上的事务。

         虚拟存储器,从逻辑上来扩充存储器的容量。操作系统的虚拟技术主要可归纳为时分复用技术,如处理器的分时共享;空分复用,

        如虚拟存储器。

      共享:并发和共享是操作系统两个最基本的特征。并发是共享的原因,若没有并发,就不存在共享的问题。共享为并发提供条件,共享

           是指系统中的资源可供内存中多个并发执行的进程共同使用。

      异步:由于并发,程序的执行不是一步接着一步,而是走走停停,这样可能会导致错误,所以操作系统要保证即使异步执行,最终结果

           也是正确的。

    3.什么是系统调用?

      字面意思,调用操作系统提供的功能。

        说到系统调用,首先让我们来了解用户态和核心态。

        用户态和核心态是操作系统为了访问资源安全而提出的,在用户态下只能访问一 般程序的资源,一些比较重要,涉及到安全的资源,用

      户态下是不能访问的;而核心态下可以理解为系统运行的进程或程序可以访问计算机的一切资源,几乎不受限制。

      我们运行的程序一般运行在用户态,当我们需要调用操作系统提供的子功能时,怎么办呢?此时,系统调用就出现了。

      凡是与资源相关的操作(存储分配,文件管理等)都通过系统调用方式向操作系统提出服务请求。

      系统调用功能大致分为:

      设备管理,文件管理,进程控制,进程通信,内存管理。

      系统调用是运行在用户的核心态。系统一般通过 硬件中断机制 进入核心态,或者由于异常,通过异常处理进入核心态;执行完系统调

      用后,退出中断处理程序或者异常处理程序,通过程序现场保护,返回断点处继续执行。

      下面列举一些由用户态转向核心态的例子:

      1)用户程序中发生错误,比如除以0

      2)发生一次中断。

     4.进程和线程

      进程的出现,是因为并发的出现,多道程序环境下,多个程序并发执行,他们将失去封闭性,并具有间断性,以及不可再现性。为了

      更好的描述程序的并发执行,引入了进程。

      从以下角度来看进程:

      1)进程是程序的一次执行过程,进程是动态的,程序是静态的。

      2)进程是系统进行资源分配和调度的一个独立单位,

      3)进程是一个程序在一个数据集合上运行的活动。

          进程切换会造成大量开销,为了较少开销,提高并发性能,引入了线程。

       线程最直接的理解是“轻量级进程”。线程是进程划分成的更小的运行单位,一个进程在执行过程中可以产生多个线程。

     

      二者区别:

      1)在引入线程的操作系统中,线程是独立调度的基本单位,本身不拥有系统资源;进程是拥有资源的最小单位。

      2)系统开销更小

      3)并发性更好

    5.进程有哪些状态

      创建状态 就绪状态(除了处理机资源以外的一切状态) 运行状态 阻塞状态 结束状态

    6.进程间的通信方式

      1)共享存储

      

           进程之间存在一块可直接访问的共享空间    

    •  低级方式是基于数据结构的共享;
    • 高级方式是基于存储区的共享。

      2)消息传递

       进程间的数据交换是以格式化的消息为单位的。

       直接通信方式:发送进程直接把消息发送给接收进程的消息队列。

       间接通信方式:发送进程把消息发送到某个中间实体中。信箱通信方式。类似电子邮件。

      3)管道通信

         管道是一个共享文件,用于连接一个读进程和一个写进程。向管道提供输入的发送进程,以字符流形式将大量的数据写入管道。

         然后读进程,是从管道中接受(读数据)。

         管道和一般文件的不同:

           限制管道的大小,管道是一个固定大小的缓冲区。

           可以协调读写操作。

       匿名通道:用于具有亲缘关系的进程之间的通信。

         有名通道:用于不具有亲缘关系的进程之间的通信。

       4)套接字

       用于在客户端和服务器之间通过网络进行通信。

       

       用户以为信息传递只是建立在两个应用程序上,但实际上在TCP连接中通过 套接字 作为连接桥梁。

       什么是套接字?

      传输层协议、IP地址、端口号,用来区分不同进程之间的通信。

      服务端和客户端间的信息传输中,套接字起到了决定性的作用,因其功能不同共分为三种套接字,一个是监听套接字,在服务端负责一直监听着客户端是否有请求发来;一种是客户端套接字,负责与服务端建立联系并收发信息;最后一种是对等连接套接字,是在服务端和客户端负责收发信息。

      5)信号

      https://www.cnblogs.com/LUO77/p/5816326.html

      6)信号量

      进程间的同步方式

    7.进程间的同步方式

      引入原因:并发执行的进程,不同的进程之间存在着不同的相互制约关系。由于进程具有异步性,为了实现正确的调度。

      临界区互斥(间接制约关系)的原则:空闲让进,忙则等待,有限等待,让权等待(让出权,即进程不能进入临界区时,应该立即释放处理器,防止进程忙等待)。

      同步方式:

      1)信号量机制:信号量是一个计数器,PV操作进行资源的申请和释放。

      2)管程:系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述,用信息和操作来描述资源,而不必关心内部结构和实现细

      节。管程是一组数据以及定义在这种数据之上的对这种数据的操作组成的软件模块。

    8.线程间的通信

      互斥量(mutex)

      信号量

      事件(event):wait-notify

    9.进程间的调度算法

      调度:进程的数量大于处理器的数量,进程争用处理机。

      调度是有层次的:根据粒子程度不同,分为1)作业调度  2)内存调度  3)进程调度。

      短进程优先

      先来先服务FCFS

      时间片轮转调度算法

      优先级调度算法

      高响应比优先

      多级反馈对垒:优先级不同队伍,每个队伍中用FCFS,执行时间片

     10.管程

      我们在学习进程同步或者互斥的时候学习到的这个概念。

      管程是一个软件模块,一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块。

      计算机中的各种软硬件资源,可以用数据结构去描述;对资源的操作可以用定义在这组数据结构上的操作来描述;我们可以忽略内部结构和实现细节。

      管程的基本特性:

      1)管程里的数据只能被局部于管程内的过程所访问;(封装性)

      2)一个进程只有通过调用管程内的过程才能进入管程内访问数据;(安全性)

      3)每次仅允许一个进程在管程内执行某个内部过程;(互斥性)

      4)管程的互斥访问是编译程序考虑的,无需程序员关注。

     

      

      

      

      

      

      

  • 相关阅读:
    go---weichart个人对Golang中并发理解
    go语言值得学习的开源项目推荐
    mysql17---增量备份
    mysql16---读写分离
    mysql15--垂直分表水平分表
    mysql14---手动备份
    mysql13---索引使用注意
    mysql12----explain
    mysql11---主键普通全文索引
    OpenOffice的简单安装
  • 原文地址:https://www.cnblogs.com/juanzhi/p/12688175.html
Copyright © 2011-2022 走看看