精华内容
下载资源
问答
  • 计算机操作系统原语分析(范文) 第 页 PAGE \* Arabic 1第 页 PAGE \* Arabic 1 PV原语 PV原语通过操作信号量来处理进程间的同步与互斥的问题其核心就是一段不可分割不可中断的程序 信号量的概念1965年由著名的荷兰...
  • 操作系统原语

    2021-01-29 14:13:47
    浅析原语概念

    按照层次设计的OS,底层包含一系列独立完成指定操作的公有程序,称为原语。

    原语具有以下特点:

    1. 处于OS最底层,最接近硬件。
    2. 运行起来具有原子性。
    3. 运行时间较短且调用频繁。

    定义原语的直接方法是关闭中断,让它的所有动作完整地进行完再打开中断。

    设备驱动、CPU切换、进程间通信等功能中的部分操作可定义为原语,作为OS内核的组成部分。

    展开全文
  • 操作系统用语范畴(primitive or atomic action) 是由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性.即原语的执行必须是连续的,在执行过程中不允许被中断。不同层次之间对话的语言称为原语,即...

    原语

    内核或微核提供核外调用的过程或函数称为原语(primitive)。

    原语是一段用机器指令编写的完成特定功能的程序,在执行过程中不允许中断。

    BaiDu 解析

    操作系统用语范畴(primitive or atomic action) 是由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性.即原语的执行必须是连续的,在执行过程中不允许被中断。不同层次之间对话的语言称为原语,即不同层之间通过原语来实现信息交换。

    从这个解析可以看到,实际上原语是用于实现某个特定操作的一组指令,在这组指令集的执行期间不允许发生中断直到完全实现要实现的某个特定的操作为止。

    之前我们提到过系统调用(广义指令),还记得那个图吗?系统的进程要完成某个内核程序(特殊动作)操作通过请求系统调用(接口)发出陷入指令后引起中断,系统由用户态切换到内核态后执行系统调用的功能最后返回用户态继续执行,完成整个动作。在这个过程当中,可以说整个动作的完成是在内核态和用户态的两个层面完成的。而原语则不同,原语作为操作系统的核心,他本身就是操作系统的一个部分,因此他执行的层面肯定在内核态而不是用户态,他常驻内存(只有个别系统有一小部分不在内核态运行)。

    因此,引起使用广义指令的功能操作都可用目态(一种机器状态,通常把它作为用户程序执行时的状态)下运行的系统进程完成,而最终整个动作的完成不一定要在管态下完成(微内核中涉及操作系统管理工作需要陷入内核态,但是功能具体的实现可以放在用户态)。例如文件的建立、打开、关闭、删除等广义指令,都是借助中断进入管态程序,然后转交给相应的进程,最终由进程实现其功能。 

    原语则不同,原语具有不可中断性,之前我们介绍过关中断的概念,实际上原语在执行操作时就是在关中断的情况下运行的,即原语执行的过程中不可能有其他的中断操作干扰或阻止他完成这一系列动作。引入原语的主要目的是实现引进程的通信和控制。从他的类型我们也可以看得出:

    1⃣️请求(Req)型原语,用于高层向低层请求某种业务;

    2⃣️证实(Cfm)型原语,用于提供业务的层证实某个动作已经完成;

    3⃣️指示(Ind)型原语,用于提供业务的层向高层报告一个与特定业务相关的动作;

    4⃣️四响应(Res)型原语,用于应答,表示来自高层的指示原语已收到。

    可以看出,这些请求服务/证实完成/报告动作/应答收到都是用来实现进程间通信的,通信的目的也是为了便于控制进程的进展。

    原子操作

    在多进程(线程)的操作系统中不能被其它进程(线程)打断的操作就叫原子操作,文件的原子操作是指操作文件时的不能被打断的操作。当某次原子操作不能完成的时候,必须回到操作之前的状态,即原子操作不可拆分,要么全部完成/要么一点也没完成。 

    如何理解原子操作和原语中的“原”字?

    我们来看这句话:原子是化学反应中最小的微粒,因此原子不可再分。

    实际上这句话它的前半句正确,化学反应最小的微粒是原子。但原子内部有其他结构(从物理层面上),比如原子核/电子。原子核又有中子和质子,中子在失去某个微粒以后可以变成质子,再划分的话就到夸克了。

    因此,我们说原子操作是因为原子是不可分割的显然不合适。实际上他应该理解为分子是作为保持物质化学性质的基本微粒,而分子是由原子构成的,因此说原子不可分割显然是从化学层面来判定的,即原子作为化学反应不可再分的基本微粒,原子在化学反应中不可分割体现在计算机中的原子操作就是原子操作不可分割。

    原语特点:

    1⃣️处于操作系统的最底层,最接近硬件。

    2⃣️原语程序的运行具有原子性,其动作必须一气呵成(出于系统安全性和便于管理)

    3⃣️原语程序运行时间较短,且调用频繁。

    展开全文
  • 2.1.3 操作系统原语实现对进程的控制

    千次阅读 多人点赞 2020-03-15 16:56:00
    文章目录0.思维导图1.什么是进程控制?2.原语实现对进程的控制3.回忆进程的组织4.进程控制大致图解5.进程控制原语的相同点6....关于原语的作用和处在操作系统内核的重要地位可参考:https://blog.csdn.net/...


    0.思维导图

    在这里插入图片描述

    1.什么是进程控制?

    在这里插入图片描述

    2.原语实现对进程的控制

    3.回忆进程的组织

    • 进程在操作系统中的组织使各个进程能够有序的进行切换和运行
      在这里插入图片描述

    4.进程控制大致图解

    在这里插入图片描述

    这里说明一下调度和切换的区别:
    调度是指决定资源分配给哪个进程的行为,是一种决策行为
    切换是指实际分配的行为,是执行行为
    一般来说现有资源调度,后有进程切换

    5.进程控制原语的相同点

    在这里插入图片描述

    • 接下来我们就具体学习一下关于进程控制的五种原语,进程的创建、终止、唤醒、阻塞、切换;

    6.进程控制的五种原语

    (1)进程的创建原语

    在这里插入图片描述

    (2)进程的终止原语

    在这里插入图片描述

    (3)进程的唤醒和阻塞原语

    • 进程的阻塞和唤醒原语是成对存在的,必须成对使用
    • 阻塞原语是由被阻塞进程自我调用实现的
    • 唤醒原语是由一个被唤醒进程合作或被其他相关的进程调用实现的
      在这里插入图片描述

    (4)进程的切换原语

    在这里插入图片描述

    参考:https://www.bilibili.com/video/av70156862?p=9

    展开全文
  • Swait(mx,1,1,L,RN,0)语句表示仅当既无writer进程在写操作(mx=1)、又无reader进程在读操作(L=RN)时,writer进程才能进入临界区进行写操作。 三、举例说明 1.桌子上有一空盘,允许放一只水果。爸爸可向盘中放苹果...

    一、哲学家进餐问题

    二、读者-写者问题

    三、举例说明


    一、哲学家进餐问题

    由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题

    问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。

    1.利用记录型信号量解决哲学家解决问题

    经分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。为了实现对筷子的互斥使用,可以用一个信号量表示一只筷子,由这五个信号量构成信号量数组。其描述如下:

    semaphore chopstick[5]={1,1,1,1,1};    
    所有的信号量均被初始化为1,
    第i位哲学家的活动可描述为:
    do{
        wait(chopstick[i]);
        wait(chopstick[(i+1)%5]);
        …
        //eat
        signal(chopstick[i]);
        signal(chopstick[(i+1)%5]);
        …
        //think
        …
    }while(TRUE);

    在以上描述中,当哲学家饥饿时,总是先去拿他左边的筷子,即执行wait(chopstick[i]);成功后,再去拿他右边的筷子,即执行wait(chopstick[(i+1)%5]);又成功后便可进餐。进餐毕,又先放下他左边的筷子,然后再放他右边的筷子。虽然,上述解法可保证不会有两个相邻的哲学家同时进餐,但却有可能引起死锁。假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0;当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限期地等待。

    对于这样的死锁问题,可采取以下几种解决方法

    (1)至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。

    (2)仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。

    (3)规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。按此规定,将是1、2号哲学家竞争1号筷子;3、4号筷子竞争3号筷子。即五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得两只筷子而进餐。

    2.利用AND信号量机制解决哲学家进餐问题

    在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,这在本质上就是前面所介绍的AND同步问题。故用AND信号量机制可获得最简洁的解法。

    semaphore chopstick[5]={1,1,1,1,1};    
    do{
        …
        //think
        …
        Swait(chopstick[(i+1)%5],chopstick[i]);
        …
        //eat
        …
        Signal(chopstick[(i+1)%5],chopstick[i]);
    }while(TRUE);

    二、读者-写者问题

    读者-写者(Reader-Writer Problem)问题是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。读者-写者问题常被用来测试新同步原语。

    1.利用记录型信号量解决读者-写者问题

    为实现Reader与Writer进程间在读或写时的互斥而设置了一个互斥信号量wmutex。另外,再设置一个整型变量readcount表示正在读的进程数目。由于只要有一个Reader进程在读,便不允许Writer进程去写。因此,仅当readcount=0,表示尚无Reader进程在读时,Reader进程才需要执行wait(wmutex)操作。若wait(wmutex)操作成功,Reader进程便可去读,相应地,做readcount+1操作。同理,仅当Reader进程在执行了readcount减1操作后其值为0时,才须执行signal(wmutex)操作,以便让Writer进程写操作。又因为readcount是一个可被多个Reader进程访问的临界资源,因此,也应该为它设置一个互斥信号量rmutex。

    读者-写者问题可描述如下:

    semaphore rmutex=1,wmutex=1;
    int readcount=0;
    void reader(){
        do{
            wait(rmutex);
            if(readcount==0)
                wait(wmutex);
            readcount++;
            signal(rmutex);
            …
            perform read operation;
            …
            wait(rmutex);
            readcount--;
            if(readcount==0)
                signal(wmutex);
            signal(rmutex);
        }while(TRUE);
    }
    void Writer(){
         do{
            wait(wmutex);
            perform write operation;
            signal(wmutex);
         }while(TRUE);
    }
    void main(){
        cobegin
            Reader();
            Writer();
        coend
    }

    2.利用信号量集机制解决读者-写者问题

    这里的读者-写者问题,与前面的略有不同,它增加了一个限制,即最多只允许RN个读者同时读。为此,又引入了一个信号量L,并赋予其值为RN,通过执行wait(L,1,1)操作来控制读者的数目,每当有一个读者进入时,就要先执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1个读者要进入读时,必然会因wait(L,1,1)操作失败而阻塞。

    对利用信号量集来解决读者-写者问题的描述如下:

    int RN;
    semphore L=RN,mx=1;
    void Reader(){
        do{
            Swait(L,1,1);
            Swait(mx,1,0);
            …
            perform read operation;
            …
            Ssignal(L,1);
        }while(TRUE);
    }
    void Writer(){
        do{
            Swait(mx,1,1;L,RN,0);
            perform write operation;
            Ssignal(mx,1);
        }while(TRUE);
    }
    void main(){
        cobegin
            Reader();
            Writer();
        coend
    }

    其中,Swait(mx,1,0)语句起着开关的作用。只要无writer进程进入写操作,mx=1,reader进程就都可以进入读操作。但只要一旦有writer进程写操作时,其mx=0,则任何reader进程就都可以进入读操作。Swait(mx,1,1,L,RN,0)语句表示仅当既无writer进程在写操作(mx=1)、又无reader进程在读操作(L=RN)时,writer进程才能进入临界区进行写操作。

    三、举例说明

    1.桌子上有一空盘,允许放一只水果。爸爸可向盘中放苹果也可向盘中放桔子,儿子专等吃盘中的桔子,女人专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

    分析:同步和互斥问题

    1.考虑同步情况即所有的“等待情况”:

    ①爸爸要等待盘子为空;
    ②儿子要等待盘中水果为桔子;
    ③女儿要等待盘中水果为苹果。

    2.互斥

    看起来盘子好像是要作互斥处理的,但由于题目中的爸爸、儿子、女儿均只有一个,并且他们访问盘子的条件都不一样,所有他们根本不会同时去访问盘子,因此盘子也就不用作互斥处理了。

    并发进程同步描述如下:

    设置3个信号量,信号量Orange表示盘中有桔子,初值为0;信号量Apple表示盘中有苹果,初值为0;信号量EmptyDish表示盘子为空,初值为1。

    int Orange=0,Apple=0,EmptyDish=1;
    main(){
        cobegin
            father();
            son();
            daughter();
        coend
    }
    father(){
        while(1){
            P(EmptyDish);
            将水果放入盘中;
            if(放入的水果是桔子)
                V(Orange);
            else
                V(Apple);
        }
    }
    son(){
        while(1){
            P(Orange);
            从盘中取出桔子;
            V(EmptyDish);
            吃桔子;
        }
    }
    daughter(){
        while(1){
            P(Apple);
            从盘中取出苹果;
            V(EmptyDish);
            吃苹果;
        }
    }

    2.设公共汽车上,司机和售票员的活动分别是:

    在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P、V操作实现他们的同步。

    分析:

    ①确定进程间的同步关系。在汽车行驶过程中,售票员关车门后,向司机发出开车信号,司机接到开车信号后启动车辆;在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客下车。
    ②确定信号量及其值。由于司机和售票员之间要互通消息,司机进程设置一个私有信号量run,用于判断司机能否进行工作,初值为0;售票员进程设置一个私有信号量stop,用于判断是否停车,售票员是否能够打开车门,初值为0。

    同步描述如下:

    int run=0,stop=0;
    main(){
        parbegin
            driver();
            busman();
        parend
    }
    driver(){
        while(1){
            P(run);
            启动车辆;
            正常行车;
            到站停车;
            V(stop);
        }
    }
    busman(){
        while(1){
            关车门;
            V(run);
            售票;
            P(stop);
            开车门;
            下乘客;
        }
    }

     

    展开全文
  • 很多定义都没有讲清楚什么是计算机操作系统中的原语(Primitives),很多定义都只是直接给出定义,而依然没有讲清楚,为什么计算机操作系统中要引入这个词来表示不可分割的动作。 primitive作为adjective ,指的是...
  • 原语操作系统

    千次阅读 2017-07-28 10:02:22
    一句话总结:个人理解成...原语操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作
  • 挂起状态概念 挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会...
  • 模拟进程创建、终止、阻塞、唤醒原语操作系统原理
  • 上面提到的操作系统提供的一对原语,是指:wait(S)原语和signal(S)原语。这一对原语常被分别称之为 P、V 操作,wait(S)和signal(S)两个操作分别写为 P(s)、V(S) 。 3.1 整型信号量 用一个整型变量作为信号量,用来...
  • 计算机操作系统PV原语分析,介绍PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序……
  • 操作系统笔记(b站王道视频)

    万次阅读 多人点赞 2019-08-16 16:41:41
    操作系统的概念和定义1.操作系统的层次结构2.操作系统的功能和目标3.操作系统总结4. 操作系统的四个基本特征5.操作系统四个特征总结6.操作系统的发展和分类7.操作系统的发展和分类的总结8.操作系统的运行机制 体系...
  • 操作系统-进程控制原语

    千次阅读 2020-02-02 15:34:26
    为了实现进程控制,在操作系统内核中,有一组程序专门用于完成对进程的控制,这些原语至少需要包括创建新进程原语,阻塞进程原语,唤醒进程原语,终止进程原语,系统服务对用户开放,即用户可以通过相应的接口来使用...
  • (1)Windows操作系统中P操作对应的函数是:WaitForSingleObject(),了解此函数的功能; (2)Windows操作系统中V操作对应的函数是:ReleaseSemaphore(),了解此函数的功能; (3)实现P、V操作。 2.实验内容 有两...
  • 操作系统中哲学家进餐问题

    千次阅读 2017-07-07 21:11:13
    利用AND 型信号量机制实现:根据课程讲述,在一个原语中,将一段代码同时需 要的多个临界资源,要么全部分配给它,要么一个都不分配,因此不会出现死锁的情形。 伪码: semaphore chopstick[5]={1,1,1,1,...
  • 本课题针对操作系统中信号量相关理论进行设计,要求编写程序并进行测试。代码主要模拟信号量的P操作(wait)和V操作(signal)。 【课题内容】 (1)编写程序; (2)进行功能测试并得出正确结果。 3.2 题目研究的...
  • 操作系统PV原语的基本原理和执行特点
  • 在资料中有吸烟者问题,哲学家问题,的各种PV原语题目及其解答。与考研直接相关。还有死锁问题
  • 操作系统中P、V操作实现进程的同步与互斥
  • EOS 操作系统实验教程

    2017-11-21 21:40:39
    EOS 操作系统实验教程.EOS 操作系统实验教程.EOS 操作系统实验教程.EOS 操作系统实验教程.
  • 在学习操作系统的时候遇到了“原语”的概念,这里简单的记录一下: 我的理解是,原语就是一段代码指令,只不过这段代码必须要运行在操作系统的核心态,不能运行在用户态,原语最重要的一个特性是不可被中断性,我们...
  • 关键字: Linux进程创建的实例 进程控制原语 进程的阻塞和唤醒 进程的撤销 进程的挂起和激活
  • 本次博客包含两个P、V原语与信号量的练习题 武汉理工大学whuters专属!!! 习题一——理发师问题 1.问题描述 一个理发店有N张沙发接待顾客,有P位理发师(P<N)。顾客到来时,如果还有空沙发,新到的顾客就坐在沙发...
  • 单项选择题 1.在进程管理中当C时进程从阻塞状态变为就绪状态 A....撤消状态 3.PV操作是A A.两条低级进程通信原语 B.两组不同的机器指令 C.两条系统调用命令 D.两条高级进程通信原语 4.对进程的管理和控制使用B A
  • 用Pascal语言实现P(s)和V(s)操作
  • 让我们更加容易的了解书本上的一些知识点,希望大家来看看
  • 操作系统中有PV原语对进程同步和互斥进行管理,现在假如有三个进程A,B,C,而他们所需的资源系统只有一个,现在A进程运行,他会使用P原语使资源数减一成为0,这时B进程也在申请所以他会被阻塞,这时的资源数为-1,...
  • 操作系统PV原语大题

    2021-06-26 08:33:56
    这里面的begin end代表啥,代表括号?为什么不用括号改用这个了?
  • 之间,进程的各状态之间的什么呀,转换 那么进程控制操作实际上就是具有特定功能的程序 那么这个程序执行的时候呢,由于不允许被中断,所以呢,我们把它称之为原语 那么进程相关的控制原语,有这样一些 那么什么是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,304
精华内容 16,121
关键字:

操作系统原语