当前位置: 首页 > news >正文

操作系统原理--进程线程

概述

顺序程序:顺序性,封闭性,可再现性(只与初始条件有关)

并发程序:描述:cobegin,coend

                特点:并发性程序与计算不一一对应,程序之间相互制约(资源占用,公共变量...),不封闭,不可再现(输出依赖于哪个程序先执行完)

进程:程序的一次运行过程 。动态,独立运行,会竞争系统资源,程序和进程存在m对n的关系。

区别于程序的静态概念,cpu按照既定的程序去执行,形成一个进程

进程的状态:运行状态、等待状态(等前置事件完成)、就绪状态(等CPU控制权)

状态切换:

Notice:运行态---->就绪态:可能当前进程 时间片到了,需要让出CPU

              就绪态不会到等待态,因为没有执行,不需要等待前置事件

              等待态也不会到运行态

进程的组成:程序与数据  &  进程控制块(一种数据结构,描述进程的信息如与系统资源的关系、不同时期所处状态)

进程控制块

        组成:进程标识符

                   进程当前状态       

        组织方式:就绪队列结构

进程控制:

        职责:负责进程状态的改变

                控制原语(原子性):创建...

                状态变化:

     

控制原语表
控制原语语法       功能Linux语句
创建
create (name,priority)
创建一个具有指定标识符的进程,建立进程的 PCB结构
fork()
撤销exit()
撤消当前运行的进程。将该进程的PCB结构归还到PCB资源池,所占用
的资源归还给父进程,从总链队列中摘除它
exit()
等待susp(chan)
中止调用进程的执行,并加入到等待chan的等待队列中;
最后使控制转向进程调度

wait()

waitpid()

唤醒
wakeup(chan)
当进程等待的事件发生时,唤醒等待该事件的进程
切换切换进程,注意区分于函数调用,(子进程不会返回父进程继续执行跳转处之后的代码)execlp()

Notice:创建进程时,父进程的变量会被子进程拷贝1个相同的,两者之间不共享

                        切换步骤:

                                1.获得cpu控制权

                                2.根据需求判断是否需要进程切换(处理机状态切换,状态变为就绪态或等待                                    态

                                3.做切换准备:保存上下文、恢复上下文

                       exec(): 更换进程执行代码

例题:

打印输出cad。注意,这个不是函数调用,execlp执行完不会回到main

        输出8行,执行到pid1=fork() 创建1个子进程,两个进程继续向下,又各自fork()一个进程,共4个进程,每个进程打印两行输出

进程之间的相互制约关系(重点)

临界资源保证串行执行!!!!!!

交互关系

        无交互       

        间接交互

        直接交互

临界资源:一次仅允许一个进程使用的资源

临界区:进程中对公共变量进行审查和修改的代码片段

互斥:竞争关系

        定义:当进程正在访问某一存储区域,不允许其他进程读出或修改该存储区的内容

同步:合作关系,严格执行顺序

        定义:并发进程在关键点上需要相互等待和互通消息

        关系举例:就诊中看病和化验

Q:如何保证进程互斥地进入临界区?

A:等待规则:忙则等待,空闲则入,有限等待

以下的例子都不满足:

while(flag == 1)跳转                                                

这时候,多上一道保险,当切换进程且其他进程“想”进入时:

仍然有缺陷。进程多时非常复杂。

引入锁:(借助操作系统的核态)

        定义:变量w,代表某种资源的状态

        操作:检测w,为1继续检测,为0,设置为1,进入临界区执行(上锁),执行完置0(解锁)

信号灯:

        由1个整型变量和两个原子操作组成

        整型变量s:记录可用资源数量,非负整数

        p操作:申请资源,计数器减1;若计数器为负,进程阻塞

        v操作:释放资源,计数器加1;若有进程阻塞,唤醒其中1个

同步信号灯:

        操作系统用于进程同步和互斥的一种机制,由Dijkstra提出。它通过计数器控制多个进程对共享资源的访问,避免竞态条件和死锁,针对同步信号灯的pv操作可以不成对

互斥信号灯:

        用于多线程或多进程环境中实现互斥访问共享资源的同步机制。确保同一时间只有一个线程或进程能够访问临界区,从而避免竞态条件和数据不一致问题。pv操作需要成对

        信号灯合并条件:并行

应用:生产者-消费者问题

分析:

        分析同步关系:互斥信号灯 mutex同步变量 n  互斥信号灯初值永远是1,因为最多只能由一个进程使用,且开始可以被使用

        规范操作:操作前先检查同步变量,再检查互斥信号灯;操作前p操作,操作后V操作成对

进程通信

概述:

        进程通信:进程之间传递信息及同步的机制 ,(IPC)

        操作:发送(send),接收(receive)

同步方式:发送方        接收方

                 阻塞              阻塞        强同步

                 阻塞             非阻塞

                非阻塞           阻塞

通信方式

        间接通信:信箱 归属进程或操作系统

        直接通信:发送接收信息时必须指明消息接发进程

共享内存:同一片物理内存映射到多个进程的地址空间的通信机制

        创建 shmget

        绑定 shm

        删除 shmctl

        

信号量:

        创建 semget

        控制 semctl

        操作 semop  P操作 和 V操作可在自己的程序中系统调用semop

信号:进程间通信或通知进程某事件发生的机制。可用于软中断异步处理

        产生来源:

                输入ctrl + C

                内核触发:硬件异常

                系统调用 kill()

        处理方式:忽略、捕获、执行默认动作

        特点:异步性、不可靠性、无优先级

管道:进程间基于文件的间接通信机制

        特点:半双工、对两端的进程来说是文件

        分类:无名管道、命名管道

消息队列:类型、时间到达顺序

        方法:

                发送: msgsnd

                接收:msgrcv

                删除:msgctl

线程

传统的进程模型: 进程是资源占用、调度/执行的基本单位

不足:进程操作开销大,并发度不高

线程

        定义:进程中的一条执行路径

        特点:单个进程创建多个线程,每个线程共享分配给该进程的内存,每个线程有自己的私用堆栈和处理执行环境

        优点:开销小于创建进程,线程间通信方便,线程切换开销小,速度快,进程内可创建多个线程,提高并行效率

        缺点:1个线程崩溃会影响整个进程崩溃(因为错误线程共享进程的内存空间,出现错误是进程级的)

        多核&多线程:

                加速比:设f为程序中能够并行的部分的运行时间在整个程序的执行时间的占比

                                加速比 =  1 / ((1-f)+ f/N) * 100% (N为处理器的个数)

        

        线程的状态:创建、就绪、等待、运行、终止

        实现:

                用户级线程:线程管理的工作由进程自己完成,内核不知道线程的存在,一个线程阻塞导致整个进程阻塞

                内核级线程:线程管理由内核来完成,线程控制时会产生处理机状态切换

        

       

        

                

http://www.dtcms.com/a/574718.html

相关文章:

  • AI 空间细胞表型分析赋能肺癌诊疗:从 “看大小” 到 “看邻里”,精准分层风险
  • 个人网站开发的现状高德能看国外地图吗
  • 【StringJoiner 、StringBuilder、StringBuffer 功能解读】
  • 中国建设网站简州新城土地整改项目网站内容发布平台源码
  • 天津网站推广外包快看点自媒体平台注册入口和下载
  • 厦门专业做网站的wordpress插件国际化
  • 【pycharm 创建一个线程,在线程函数中增加的日志打印,日志打印了,但是打断点进不去】
  • Rust 练习册 5:Fn、FnMut 和 FnOnce trait
  • 哈尔滨cms模板建站wordpress 支持小工具
  • 上海公司查询网站网站改版 新闻
  • 电阻发热的底层逻辑
  • 虚拟机原理
  • 2003访问网站提示输入用户名密码wordpress右键插件
  • 营销网站建设的目的推广你公司网站
  • 如何建设音乐网站如何注册一个平台
  • 网址导航浏览器下载苏州seo优化外包公司
  • DVL多普勒速度计原理与嵌入式实现
  • vs怎么建手机网站网站开发开题报告范文2019
  • 迅为RK3576开发板编译环境Ubuntu20.04编译配置-修改物理内存
  • 岗贝路网站建设建设网站公司电话号码
  • 国内做网站多少钱特定ip段访问网站代码
  • Android控制三方音乐应用播放方案(实测可用)
  • 泰国金木棉做网站网站适合新手做的网站项目
  • 网站编辑面试问题和答案小程序源码分享
  • 怎么做pc端移动网站北京官方网站网
  • 文山网站建设兼职c 网站开发 书
  • 网站开发排行微网站建设方案财政
  • 为什么没人做物流网站郑州做网站哪个平台好
  • 26.序列模型
  • 安阳网站建设商祺wordpress qq登入设置