精华内容
下载资源
问答
  • printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程):\n"); scanf("%d",&num); while(num>0) { create(num); scanf("%d",&num); } sheduling( ); if(run!=-1) { printf("进程名 ...
  • fifolock 一个灵活的低级工具,用于在asyncio Python中创建同步原语
  • 控制原语对比 线程控制原语 进程控制原语 pthread_create() fork(); pthread_self() getpid(); pthread_exit() exit(); / return pthread_join() wait()/waitpid() pthread_cancel() kill() pthread_detach()

    pthread_self

    pthread_t pthread_self(void);	获取线程id。 线程id是在进程地址空间内部,用来标识线程身份的id号。
    
    返回值:本线程id
    
    检查出错返回:  线程中。
    

    线程 ID:pthread_t 类型,本质:在 Linux 下为无符号整数(%lu),其他系统中可能是结构体实现 线程 ID 是进程内部,识别标志。(两个进程间,线程ID 允许相同)

    注意:不应使用全局变量 pthread_t tid,在子线程中通过 pthread_create 传出参数来获取线程 ID,而应使用pthread_self。

    pthread_create

    int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*start_rountn)(void *), void *arg); 创建子线程,类似于进程中的fork函数。
    
    ​	参1:传出参数,表新创建的子线程 id
    
    ​	参2:线程属性。传NULL表使用默认属性。
    
    ​	参3:子线程回调函数。创建成功,ptherad_create函数返回时,该函数会被自动调用。
    ​	
    ​	参4:参3的参数。没有的话,传NULL
    
    ​	返回值:成功:0
    
    ​		失败:errno-----Linux 环境下,所有线程特点,失败均直接返回错误号。
    

    创建一个进程的简单demo

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <errno.h>
    #include <pthread.h>
    
    void sys_err(const char *str)
    {
    	perror(str);
    	exit(1);
    }
    
    void *tfn(void *arg)
    {
        printf("thread: pid = %d, tid = %lu\n", getpid(), pthread_self());
    
        return NULL;
    }
    
    int main(int argc, char *argv[])
    {
        pthread_t tid;
    
        int ret = pthread_create(&tid, NULL, tfn, NULL);
        if (ret != 0) {
            perror("pthread_create error");
        }
    
        printf("main: pid = %d, tid = %lu\n", getpid(), pthread_self());
        sleep(1);
    
    	return 0;
    }
    
    

    pthread_exit

    void pthread_exit(void *retval);  退出当前线程。
    
    ​	retval:退出值。 无退出值时,NULL
    
    ​	pthread_exit(): 退出当前线程。
    

    pthread_join

    int pthread_join(pthread_t thread, void **retval);	阻塞等待线程退出,获取线程退出状态 其作用,对应进程中 waitpid() 函数。 
    
    	thread: 待回收的线程id
    
    	retval:传出参数。 回收的那个线程的退出值。
    
    		线程异常借助,值为 -1。
    
    	返回值:成功:0
    
    		   失败:errno
    
    1. 如果thread 线程通过return 返回,retval 所指向的单元里存放的是 thread 线程函数的返回值。
    2. 如果 thread 线程被别的线程调用 pthread_cancel 异常终止掉,retval 所指向的单元里存放的是常数PTHREAD_CANCELED。
    3. 如果thread 线程是自己调用 pthread_exit 终止的,retval 所指向的单元存放的是传给 pthread_exit 的参数。
    4. 如果对thread 线程的终止状态不感兴趣,可以传NULL 给retval 参数。

    pthread_cancel

    int pthread_cancel(pthread_t thread);		杀死一个线程。  需要到达取消点(保存点)
    
    thread: 待杀死的线程id
    ​	返回值:成功:0
    ​		   失败:errno
    

    如果,子线程没有到达取消点, 那么 pthread_cancel 无效。

    ​ 我们可以在程序中,手动添加一个取消点。使用 pthread_testcancel();

    ​ 成功被 pthread_cancel() 杀死的线程,返回 -1.使用pthead_join 回收。

    pthread_detach

    int pthread_detach(pthread_t thread);    实现线程分离
    
    thread: 待分离的线程id
    
    ​	返回值:成功:0
    
    ​		失败:errno
    

    线程分离状态:指定该状态,线程主动与主控线程断开关系。线程结束后,其退出状态不由其他线程获取,而直接自己自动释放。网络、多线程服务器常用。
    进程若有该机制,将不会产生僵尸进程。僵尸进程的产生主要由于进程死后,大部分资源被释放,一点残留资源仍存于系统中,导致内核认为该进程仍存在。

    控制原语对比

    线程控制原语 进程控制原语
    pthread_create() fork();
    pthread_self() getpid();
    pthread_exit() exit(); / return
    pthread_join() wait()/waitpid()
    pthread_cancel() kill()
    pthread_detach()
    展开全文
  • linux进程控制原语

    千次阅读 2015-01-29 11:49:43
    一,创建原语:fork函数族 1,fork() 2,vfork 二,执行(加载)原语:exec函数族 1,execl 2,execv 3,execle 4,execve 5,execlp 6,execvp 三,退出/等待退出原语:exit函数族,wait函数族

    对于进程的控制,通常来说不过是创建,执行,终止。

    linux对于这三类控制都有一类函数,是为进程控制原语

    一,创建原语:fork函数族

    1,fork()

    2,vfork


    二,执行(加载)原语:exec函数族

    1,execl

    2,execv

    3,execle

    4,execve

    5,execlp

    6,execvp

    三,退出/等待退出原语:exit函数族,wait函数族

    1,exit

    2,_eixt

    3,wait

    4,waitpid

    5,waitid


    展开全文
  • 操作系统-进程控制原语

    千次阅读 2020-02-02 15:34:26
    为了实现进程控制,在...1、进程创建原语 从PCB集合中申请一个空白的PCB,将调用者参数(如进程外部标识符,初始CPU状态,进程优先数,初始内存及申请资源清单)添入该PCB,设置记账数据。置新进程为“就绪”态。 2...

    为了实现进程控制,在操作系统内核中,有一组程序专门用于完成对进程的控制,这些原语至少需要包括创建新进程原语,阻塞进程原语,唤醒进程原语,终止进程原语,系统服务对用户开放,即用户可以通过相应的接口来使用它们。

    1、进程创建原语

    从PCB集合中申请一个空白的PCB,将调用者参数(如进程外部标识符,初始CPU状态,进程优先数,初始内存及申请资源清单)添入该PCB,设置记账数据。置新进程为“就绪”态。

    2、终止进程原语

    用于终止完成的进程,回收其所占资源。包括消去其资源描述块,消去进程的PCB。

    3、阻塞原语

    将进程从运行态变为阻塞态。进程被插入等待事件的队列,同时修改PCB中相应的表项,如进程状态和等待队列指针。

    4、唤醒原语

    将进程从阻塞态变为就绪态。进程从阻塞队列移出,插入就绪队列,等待调度,同时修改PCB中相应的表项,如进程状态。

    展开全文
  • 模拟进程创建、终止、阻塞、唤醒原语操作系统原理
  • 2.1.3 操作系统之原语实现对进程的控制

    千次阅读 多人点赞 2020-03-15 16:56:00
    进程控制的五种原语(1)进程的创建原语(2)进程的终止原语(3)进程的唤醒和阻塞原语(4)进程的切换原语 0.思维导图 1.什么是进程控制? 2.原语实现对进程的控制 关于原语的作用和处在操作系统内核的重要地位...


    0.思维导图

    在这里插入图片描述

    1.什么是进程控制?

    在这里插入图片描述

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

    3.回忆进程的组织

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

    4.进程控制大致图解

    在这里插入图片描述

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

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

    在这里插入图片描述

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

    6.进程控制的五种原语

    (1)进程的创建原语

    在这里插入图片描述

    (2)进程的终止原语

    在这里插入图片描述

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

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

    (4)进程的切换原语

    在这里插入图片描述

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

    展开全文
  • 创建原语 撤销原语 挂起原语 激活原语 阻塞原语 唤醒原语 进程调度原语 1.何时调用阻塞原语? 当正在运行的进程需要等待某一事 件而发生运行受阻时,它通过中断请求系统服务。 系统按照进程的需求进行适当处理后,...
  • 1、 创建原语:创建一个就绪状态的进程,使进程从创建状态变迁为就绪状态。 2、 撤销原语:使进程从执行状态变迁为完成状态。 3、 阻塞原语:使进程从运行状态变迁为阻塞状态。 4、 唤醒原语:使进程从阻塞状态...
  • 文章目录线程介绍Linux内核线程实现原理线程共享资源线程非共享资源线程优、缺点线程控制原语pthread_self函数pthread_create函数pthread_exit函数创建N个线程总结: 线程介绍 Linux内核线程实现原理 类Unix系统中...
  • 进程创建、终止、阻塞、调度、唤醒原语有助于对操作系统中近程功能的了解,掌握操作系统模块的设计方法和工作原理
  • 一、创建原语 1)fork() 2)vfork() 二、执行(加载)原语:exec函数族 1)execl 2) execv 3) execle 4) execve 5) execlp 6) execvp 三、退出/等待原语:exit()函数族,wait函数族 ...
  • 用于创建交互式聊天机器人的有用原语的集合。 用法 npm install --save chatter 在4.x和6.x中测试。 注意:如果下面的代码示例语法不熟悉,请不用担心,它只是JavaScript! 阅读以了解更多信息。 什么是机器人? ...
  • 3、进程控制思维导图进程控制进程控制相关的原语创建原语撤销原语阻塞原语、唤醒原语切换原语原语要做的几件事 思维导图 进程控制 1、进程控制:顾名思义,进程控制是对系统中的所有进程实施有效的管理,它具有创建...
  • 线程原语

    2015-08-10 11:31:21
    线程原语 比较两个线程是否相等 #include int pthread_equal(pthread_t tid1,pthread_t tid2); 相等--非0,否则-- 0 获得自身的线程ID #include pthread_t pthread_self(void); 创建线程 #include int pthread_...
  • PV原语

    2019-01-21 17:01:38
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 进程原语和线程原语的比较

    千次阅读 2012-12-03 19:39:52
    进程原语  线程原语  描述  fork  pthread_create  创建新的控制流  exit  pthread_exit  从现有的控制流中退出  waitpid  pthread_join  从控制流中
  • 学习线程原语

    2018-03-26 13:01:56
    创建线程 获取线程ID 打印创建错误信息 等待线程(类比进程wait) 取消线程 设置线程分离态 比较线程是否相等 ...了解线程的每个原语,有助于对多线程编程透彻的理解 创建线程 Pthread_create(p...
  • 进程控制原语:1)创建原语 2)撤销原语 3)阻塞原语 4)唤醒原语 6. windows启动进程 a. 可以通过这几个函数来启动进程:1)system("C:DrawRec.exe") 2)WinExec("C:DrawRec.exe") 3)ShellExecute(NULL,"open","C:...
  • 进程和线程我们先从 Linux 的进程谈起,操作系统要运行一个可执行程序,首先要将程序文件加载到内存,然后 CPU 去读取和执行程序指令,而一个进程就是“一次程序的运行过程”,内核会给每一个进程创建一个名为task_...
  • 线程控制原语

    2019-05-07 16:03:00
    一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。 线程,其实也是轻量级的进程。一个进程,即使我们没有主动创建线程,也会有一个默认的主线程(即进程本身)。线程只用复杂代码如何执行...
  • 什么是进程进程的定义是:...查看进程在Windows系统中,打开QQ程序这个软件,系统就会创建一个进程,通过任务栏管理器可以方便直观的查看。如下图所示:在Linux操作系统中,执行ps -aux指令,下图所示。进程特征动态...
  • 进程控制原语

    千次阅读 2005-02-03 14:34:00
    UNIX下的进程控制原语用于控制进程的创建、执行、终止等。其基本原语如下: 用fork创建新进程,用exec执行新的程序,exit函数和两个wait函数处理终止和等待终止。下面分别讲解一下: 除了交换进程(swapper)、...
  • 以NtyCo为例,协程一旦创建就不能有用户自己销毁,必须得以子过程执行结束,就会自动销毁协程的上下文数据。以_exec执行入口函数返回而销毁协程的上下文与相关信息。co->func(co->arg) 是子过程,若用户需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 884
精华内容 353
关键字:

创建原语