进程控制块

进程和线程

我怕爱的太早我们不能终老 提交于 2020-02-09 09:35:25
计算机是完成特定任务的工具,我们把特定的任务称为task。最早的计算机是单task系统,需要手动装载,启动task的程序,所有的资源由该task独占,一个task完成后才能启动下一个task。操作系统的一个重要功能是管理task,为task分配系统资源。进程是操作系统分配资源和调度task的基本单位。 进程是一个具有一定独特功能的程序在一个数据集合上的一次动态执行。进程由代码块(静态,二进制),数据集,进程控制块(动态)三部分组成。进程概念的引入是为了便于理解操作系统对task管理。进程是操作系统为task分配系统资源的基本单位,也是task调度的基本单位。 线程是CPU计算流的抽象,一般认为它由程序计数器(PC),栈和寄存器组构成。从操作系统的角度来看,线程使资源和计算流分离,多个线程可以共享系统资源,实现了系统资源(内存,文件,信号)的高效利用。同时,这种共享也实现了计算流之间更高效的交互,实现更高的并行和并发度。 POSIX的使用 demo 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 #include <sys

多进程《一》进程理论

[亡魂溺海] 提交于 2020-02-08 05:06:50
一 什么是进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 二 进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 举例: 想象一位有一手好厨艺的计算机科学家egon正在为他的女儿元昊烘制生日蛋糕。 他有做生日蛋糕的食谱, 厨房里有所需的原料:面粉、鸡蛋、韭菜,蒜泥等。 在这个比喻中: 做蛋糕的食谱就是程序(即用适当形式描述的算法) 计算机科学家就是处理器(cpu) 而做蛋糕的各种原料就是输入数据。 进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和。 现在假设计算机科学家egon的儿子alex哭着跑了进来,说:Hey, Dad, my head got stung by a bee. 科学家egon想了想,处理儿子alex蛰伤的任务比给女儿元昊做蛋糕的任务更重要,于是 计算机科学家就记录下他照着食谱做到哪儿了(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蛰伤。这里,我们看到处理机从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蛰伤处理完之后,这位计算机科学家又回来做蛋糕,从他 离开时的那一步继续做下去。 需要强调的是:同一个程序执行两次,那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放苍井空,一个可以播放饭岛爱。 三

操作系统学习之进程和线程

不问归期 提交于 2020-02-07 12:07:07
为什么会有进程 进程是一个计算机工程概念,进程包含一个程序运行的所有资源。 进程提供程序的抽象 一个独立的逻辑流 一个私有的地址空间 逻辑控制流 如果使用调试器调试一个程序,就能看到一些列的(PC),这些PC的序列就是逻辑控制流。 并发流 一个逻辑流的执行在时间上与另一个流重叠,成为并发流,多个流并发地执行的一般现象称为并发。简单理解为同时做多件事。 并行 : 一般出现在多个CPU上。 多任务 : 一个进程和其他进程轮流运行的概念。 时间片 : 一个进程执行他的控制流的每一时间片段。 私有地址空间 进程为每个程序提供一个假象,它好在独立的使用系统的地址空间。 思考 docker虚拟化技术,基于进程的隔离。 进程模型 为什么会存在进程模型? 一个进程就是一个正在运行的程序,进程需要有自己的程序计数器(PC),内存空间以及CPU,真实的情况是在计算机中存在有多个进程,然后多个进程在同一时间只有一个使用CPU,所以需要来回切换,于是需要使用进程模型来管理。 用户模式和内核模式 处理器通常是用某个控制寄存器的一个模式位(mode bit)来提供。进入内核模式 中断、系统错误、系统调用。 上下文切换 创建进程、控制 123456789101112 大专栏 操作系统学习之进程和线程13141516 #include "stdio.h"#include <unistd.h>int main()

探讨进程、线程、协程的区别

坚强是说给别人听的谎言 提交于 2020-02-07 07:02:54
它们都是因程序的 并发 执行程序而产生 一、进程 ①、进程是资源分配的基本单位,程序运行时系统就会创建一个进程,例如打开qq应用就创建一个进程。 ②、操作系统会为它分配专门的进程控制块 ③、三种状态:就绪状态、执行状态、阻塞状态 二、线程 ①、线程是程序执行时的最小单位,一个进程可以由很多个线程组成,但至少包含一个主线程,例如qq里有多个功能则多个线程 三、协程 ①、协程是一种用户态的轻量级线程 , 它是线程更小的执行单元,它的调度完全由用户控制 四、进程与线程的区别 ①、进程开销更大:进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多。 ②、进程共享数据更复杂:同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行 ③、进程健壮性更好:多线程程序只要有一个线程死掉,整个进程也死掉,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间,线程之间没有单独的地址空间。 来源: https://www.cnblogs.com/legendheng/p/10068448.html

linux系统调用进程2信号

人盡茶涼 提交于 2020-02-06 22:37:44
1. 信号理论基础 **信号共性: 简单、不能携带大量信息、满足条件才发送 **信号的特质: 信号是软件层面上的"中断"。一旦型号产生,无论程序执行到什么位置,必须立即停止运行,处理信号,处理结束,在继续执行后续指令。 所有信号的产生以及处理全部都是有【内存】完成的 *** 信号产生 1. 按键产生,ctrl+z、ctrl+c 2. 系统调用产生, 如果kill 3. 软件条件产生, sleep 4. 硬件异常产生, 段错误、 段错误: 1. 访问了不是自己内存, 比如malloc自己申请了区域,访问malloc区域外了 2. 对只读区进行修改 char* ch="abc" ch[0]='a' 5.命令产生,比如kill命令 未决: 产生与递达之间状态 递达: 产生送到内核,直接被内核处理掉 信号处理方式: 默认、忽略、捕捉(自定义) linux内核进程控制块pcb是一个结构体,task_struct,除了包含进程id,状态,工作目录,用户id,组id,文件描述符表, 还包含信号相关信息,阻塞信号和未决信号 例子: 比如ctrl+c发送2号信号,那么未决信号集把第二位设置为1,那么内核发现第二未变成1了,处理2号信号,处理[默认、忽略、捕捉(自定义)]完毕第二位变成0 未决信号集把第二位设置为1 完毕第二位变成0 如果由于某种原因,把2号信号设置屏蔽,那么信号屏蔽字中2号变成1

【操作系统】进程/线程模型

南笙酒味 提交于 2020-02-05 01:07:58
1. 进程的基本概念 1.1 多道程序设计(Multi-Programming) 首先从多道程序设计开始,以便更好的理解进程的必要性。 在早期没有多道程序设计之前,操作系统只有一个 物理程序计数器 ,这样多个程序只能串行执行,在引入多道程序之后,一个物理程序计数器可以被拆分成多个 逻辑程序计数器 , 每个程序都有其独有的程序计数器 ,从而实现程序的并发执行。 所谓的多道程序设计,是指 允许多个程序同时进入内存并运行 ,目的在于提高系统效率。 1.2 并发环境与并发程序 并发环境:一段时间间隔内,单处理器上游两个或两个以上的程序同时处于开始运行但尚未结束的状态,并且运行次序不是事先确定的。 并发程序:在并发环境中执行的程序。 在并发环境下,每个程序的运行状态应该怎样去刻画呢?这个时候进程就应运而生了。 1.3 进程的定义 Process:进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和CPU调度的独立单位。进程又称任务(Task or Job)。 进程可以理解为程序的一次执行过程, 操作系统为每个进程分配了一独立的地址空间。 操作系统为了统一管理所有进程,需要一个专门的数据结构——进程控制块。 1.4 进程控制块PCB(Process Control Block) 又称为进程描述符、进程属性,是操作系统用于管理进程的专门的数据结构

操作系统学习笔记(Part four)

£可爱£侵袭症+ 提交于 2020-02-04 14:32:02
4.0进程管理 4.1进程概念 4.1.1进程的基本概念 进程是一个动态的概念,是个过程。 还有其他的分类标准(...) 4.1.2进程状态 阻塞状态也是等待状态(Wait) 4.1.3进程控制块 state:用来描述进程的状态:运行、就绪、阻塞 counter:进程还可以运行tick数量,减至0后进入就绪 priority:进程优先级 pid,uid,gid:和进程的标识有关 p_pptr:和进程家族关系有关 next_task:和进程链表,方便操作系统遍历进程 mm:和内存有关 fs:和文件系统有关 policy:和进程调度策略有关 4.2进程控制 4.2.1进程控制概念 4.2.2Windows进程控制 、 上述三个函数对CreateProcess一定程度上有一定的封装 IpStartupInfo :启动信息,设置初启的状态的 IpProcessInformation :输出参数 应用例子: 第一个方式比较温和 第二关方式非常暴力 强制结束 4.2.3Linux进程控制 子进程是父进程的复制。 唯一差别是ID与时间有关的信息不一样。 fork创建了子进程 父进程和子进程并发运行 所以输出来两个HELLO WORLD! 在父进程执行一次,子进程也会执行一次。 父进程的pid就是子进程的ID 父进程和子进程谁先输出不得而知 从绿色箭头处开始并发 在Linux中,除了init

进程池,线程池使用

大兔子大兔子 提交于 2020-02-04 11:13:32
进程的概念 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。 第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。[3] 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。 引入进程原因 为了提高资源利用率和系统处理能力,现阶段计算机系统都是多道程序系统,即多道程序并发执行。 优化系统资源,方便计算机调度,避免系统运算紊乱。 进程的并行与并发 并行 :并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核CPU) 并发 :并行是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A,交替使用,目的是提高效率。 并行简图 并发(线程) 二、进程线程 1、进程 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程

0512 操作系统进程调度实验

我只是一个虾纸丫 提交于 2020-02-04 02:33:17
实验三进程调度模拟程序 专业:商软2班 姓名:韩麒麟 学号:201406114253 一. 目的和要求 1.1. 实验目的 用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 1.2. 实验要求 1.2.1例题:设计一个有 N个进程并发执行的进程调度模拟程序。 进程调度算法:采用最高优先级优先的调度算法(即把处理机分配给优先级最高的进程)和先来先服务(若优先级相同)算法。 (1). 每个进程有一个进程控制块(PCB)表示。进程控制块包含如下信息:进程名、优先级、到达时间、需要运行时间、已用CPU时间、进程状态等等。 (2). 进程的优先级及需要的运行时间可以事先人为地指定,进程的运行时间以时间片为单位进行计算。 (3). 每个进程的状态可以是就绪 r(ready)、运行R(Running)、或完成F(Finished)三种状态之一。 (4). 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 (5). 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待调度。 (6). 每进行一次调度程序都打印一次运行进程、就绪队列中各个进程的 PCB,以便进行检查

进程基本知识

£可爱£侵袭症+ 提交于 2020-02-04 02:01:18
一、 进程基本知识 1.1 进程概念 进程是程序执行和资源管理的最小单位,是程序动态执行的过程。 Linux下是通过进程控制块(PCB)来描述一个进程的,进程控制块包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述。在Linux中进程控制块中的每一项都是一个task_struct结构,是在include/linux/sched.h中定义的。 1.2 进程标识 在Linux中进程的主要标识有进程标识号(PID)以及父进程标识号(PPID)。PID唯一的标识一个进程。PPID、PID都是一个非零的正整数。获得当前进程的PID和PPID的系统调用分别为 1: #include <sys/types.h> 2: #include <unistd.h> 3: pid_t getpid(void); 4: pid_t getppid(void); 1.3 进程的各个状态 进程状态的宏定义 1: #define TASK_RUNNING 0 2: #define TASK_INTERRUPTIBLE 1 3: #define TASK_UNINTERRUPTIBLE 2 4: #define TASK_STOPPED 4 5: #define TASK_TRACED 8 6: /* in tsk->exit_state */ 7: #define EXIT_ZOMBIE 16 8