操作系统(一)进程与线程

一. 操作系统的四个特性

并发:同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件)
共享:系统中的资源可以被内存中多个并发执行的进线程共同使用
虚拟:通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个
异步:系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进

二.进程

进程是操作系统中进行保护和资源分配的基本单位。

1.进程的状态

  • 就绪:进程已处于准备好运行的状态,即进程已分配到除CPU外的所有必要资源后,只要再获得CPU,便可立即执行。
  • 执行:进程已经获得CPU,程序正在执行状态。
  • 阻塞:正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态。

进程挂起:解决死锁,不分配资源,不参与调度。

2.进程的组成

程序段、相关的数据段和PCB三部分构成进程实体。

进程控制模块(PCB)

系统为每个进程定义了一个数据结构,进程控制块PCB。包括:

 1)进程标示符
        (1)内部标示符    OS赋予,唯一的数字标示符
        (2)外部标示符    创建者提供,字母+数字    包含父进程标示符,子进程标示符,还有用户标识
    2)处理机状态
        (1)通用寄存器     用户程序可访问,暂存信息,一般8~32个通用寄存器
        (2)指令计数器    下一条指令的地址
        (3)程序状态字PSW     含有状态信息条件码、执行方式、中断屏蔽标志
        (4)用户栈指针    存放过程和系统调用参数及调用地址
    3)进程调度信息
        (1)进程状态    调度和对换的依据
        (2)进程优先级
        (3)其他信息    已等待CPU时间总和,已执行时间总和
        (4)事件    阻塞原因
    4)进程控制信息
        (1)程序和数据地址
        (2)进程同步和通信机制    消息队列指针,信号量
        (3)资源清单    所需资源和已分配到的资源
        (4)链接指针    进程队列下一个进程PCB的首地址

进程有多个子进程,只有一个父进程,父进程撤销,子进程可以不被撤销,此时子进程将成为孤儿进程,由于进程不可能脱离进程树而独立存在,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

3.进程特征

动态性:是一次执行过程,创建,调度执行,撤销等动态的。

并发性:多进程同时存在内存,一段时间内同时运行。

独立性:进程是独立运行的基本单位,也是资源分配和调度的独立单元。

异步性:各进程各自独立,不可预知的向前推进。

结构化:每个进程配PCB,程序段,数据段。

4.进程切换

进程切换:保存旧进程的上下文到PCB数据结构,加载新进程的上下文。每个进程有对应的内存映射,防止多个进程同时加载到内存之间相互影响。

作业调度:是指作业从外存调入到内存的过程

进程调度:是指进程从内存到分配cpu执行的过程

周转时间: 从开始申请执行任务,到执行任务完成

响应时间: 从开始申请执行任务到开始执行任务

进程调度算法

先来先服务调度算法FCFS:按作业或者进程到达的先后顺序依次调度;(平均周转时间可能会很长 )

短作业优先调度算法SJF:算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行(周转时间短,但是响应时间长 )

最短剩余时间优先:进程调度总是选择预期剩余时间最短的进程。

高相应比算法HRN:响应比=(等待时间+要求服务时间)/要求服务时间;

时间片轮转调度RR:按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;(响应时间可以得到保证)

多级队列调度算法:将就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。其中,一个进程根据自身属性被永久地分配到一个队列中。

多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。

5.进程通信

管道pipe管道只能用于亲缘关系的父子进程,命名管道非父子进程间通信。半双工通信。

(1)、如果管道为空,从管道读取数据的一方会阻塞。直到管道中有新的数据为止

(2)、管道的数据通信具有FIFO特性

消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。管道中的数据并没有分割为一个一个的数据独立单位,在字节流上是连续的。然而,消息队列却将数据分成了一个一个独立的数据单位,每一个数据单位被称为消息体。每一个消息体都是固定大小的存储块儿,在字节流上是不连续的。

共享内存SharedMemory:各个进程都能够共同访问的共享的内存区域;是独立于所有的进程空间之外的地址区域。

信号量Semaphore:表示的是一种共享资源(空闲)的个数,对共享资源的访问规则。用一种数量去标识某一种共享资源的个数(空闲)。当有进程需要访问对应的共享资源的时候,则需要先查看(申请),根据资源对应的当前可用数量进行申请。(申请所需要使用的资源个数)

信号 ( sinal ) 信号又被称之为中断,需要处理什么对应的是中断处理函数,此时设置断点,形参入栈,保存现场信息,然后去执行中断处理函数,当处理完成之后,恢复现场信息,程序继续往下执行

套接字Socket:网络之间不同进程间通信。

三.线程

线程是操作系统进程中能够独立执行的实体,是处理器调度和分派的基本单位。不分配资源,没有内存映射,多线程共同使用进程资源。

线程有自己的TCB(thread control block线程控制块), 只负责这条流程的信息,包括PC程序计数器,SP栈,State状态,和寄存器,线程id。

线程有内核级线程用户级线程,我们一般说的都是用户级线程,线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。内核级线程由内核管理,应用程序没有进行线程管理的代码,只能调用内核线程的接口。只有内核级线程才能发挥多核性能,因为内核级线程共用一套MMU(即内存映射表),统一分配核1核2(即有多个CPU,可以一个CPU执行一个内核级线程)。进程无法发挥多核性能,因为进程切换都得切MMU。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值