进程控制块

进程知多少?

雨燕双飞 提交于 2019-12-23 21:16:28
目录 进程为什么出现? 进程的组成 如何竞争资源(调度算法) FCFS RR SPN SRT HRRN FB 进程状态 三态图 五态图 七态图 进程关系 父子关系 僵尸进程 孤儿进程 执行模式 进程间通讯 管道(Pipe) 流管道(Flow Pipe) 有名管道(Named Pipe) 信号量(Semophore) 信号(Signal) 消息队列(Message Queue) 共享内存(Shared Memory) 套接字(Socket) 总结 文章首发: 进程知多少? Java 多线程系列文章第 1 篇 要讲线程,一般都得讲一讲进程,进程是何方神圣呢?下面来简单介绍一下。 先通过任务管理器看看 Windows 系统下的进程。 从图片来看,每一个进程都占有 CPU、内存、磁盘、网络等资源。 站在操作系统的角度,进程是分配资源的基本单位,也是最小单位 。 进程为什么出现? 引入进程的目的: 为了使多个程序能并发执行,以提高资源的利用率和系统的吞吐量 。怎么理解这句话呢?一个程序在运行过程中会涉及很多操作,利用 CPU 计算、通过磁盘 IO 进行数据传输等等,我们知道当程序在进行磁盘 IO 的时候,因为速度问题,会比较慢,所在在这个过程中 CPU 会空闲下来,这会造成资源的浪费,正因为引入进程,在 A 进程进行磁盘 IO 的时候,会让出 CPU 给 B 进程,合理地利用了 CPU 资源

进程、线程

别来无恙 提交于 2019-12-23 15:56:33
1 进程   程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。需要强调的是:同一个程序执行两次,那也是两个进程。    进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序 用来描 述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外 部特征,描述 进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 进程的基本状态: 1、就绪(Ready)状态 当进程已分配到除CPU以外的所有必要资源后,只要在获得CPU,便可立即执行,进程这时的状态就称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,称为就绪队列。 2、执行状态 进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态;再多处理机系统中,则有多个进程处于执行状态。 3、阻塞状态 正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即程序的执行受到阻塞,把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。 三种进程之间的转换图: 几种进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 #

python 进程 线程

一笑奈何 提交于 2019-12-23 07:08:01
1.概念 进程 线程 # 进程 就是一个程序在一个数据集上的一个动态执行过程 是最小的资源单元 # 进程是由 程序 数据集 进程控制块组成 本质上是一段程序的运行过程 # 1. 一个程序至少有一个进程,一个进程至少有一个线程.(进程可以理解成线程的容器) # # 2. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 # # 3. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和 # 程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 # # 4. 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. # 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程 # 自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)但是 # 它可与同属一个进程的其他的线程共享进程所拥有的全部资源. # 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. # 线程 :降低上下文切换的消耗 提高系统的并发性 是最小执行单元 # python GIL # 无论你启多少个线程,你有多少个cpu,

Linux内核分析— —创建新进程的过程

只谈情不闲聊 提交于 2019-12-22 17:56:49
分析Linux内核创建一个新进程的过程 实验过程 要求:使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证对Linux系统创建一个新进程的理解,推荐在实验楼Linux虚拟机环境下完成实验。 cd LinuxKernel qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 课程内容 阅读理解task_struct数据结构: 进程控制块PCB——task_struct 1、操作系统的三大管理功能包括:   (1)进程管理   (2)内存管理   (3)文件系统 2、PCB task_struct中包含:   (1)进程状态   (2)进程打开的文件   (3)进程优先级信息 3、通过唯一的进程标识PID来区别每个进程。 4、进程状态转化 (1)创建新进程后实际的状态是TASK_RUNNING,就绪但是没有运行,调度器选择一个task之后进入运行态,也叫TASK_RUNNING。 (2)当进程是TASK_RUNNING时,代表这个进程是可运行的,至于它有没有真的在运行,取决于它有没有获得cpu的控制权,即有没有在cpu上实际的运行。 (3)一个正在进行的进程调用do_exit(),进入TASK_ZOMBIE,进程被终止,“僵尸进程”。 (4)等待特定时间或者资源的时候

线程的那些事儿

岁酱吖の 提交于 2019-12-21 23:51:07
一、线程的基本概念:      线程被称为轻量级进程。   计算机的执行单位以线程为单位。计算机的最小可执行是线程。   进程是资源分配的基本单位。线程是可执行的基本单位,是可被调度的基本单位。   线程不可以自己独立拥有资源。线程的执行必须依赖所属进程中的资源。   进程中必须至少有一个线程。   由于GIL(全局解释锁,只在Cpython中有),导致线程没有真正的并行。   线程分为用户级线程和内核级线程。 二、进程由  代码段、数据段、PCB(进程控制块)组成   线程由  代码块、数据块、TCB(线程控制块)组成 三、线程和进程的比较   thread -- 线程   导入线程模块的两种方法:   import threading   from threading import Thread   (1) cpu 切换进程比切换线程 慢很多。在python中,如果IO操作过多的话,使用多线程最好了。   (2) 在同一进程内,所有线程共享这个进程的pid,也就是说所有的线程共享所属进程的资源和内存。   (3) 在同一个进程内,所有线程共享该进程中的全局变量   (4) 因为有GIL锁的存在,在Cpython中,没有真正的线程并行。但是有多进程并行      当任务是计算密集的情况下使用多进程。   (5) 守护线程和守护进程的区别      守护进程:要么自己正常结束

python 进程

本秂侑毒 提交于 2019-12-21 00:20:18
进程探究 进程:这是一个在内存中运行的任务实例 Linux下进程属性: 进程拥有自己独立的PID(身份证号) 0 ~ 65535 PID是有限的 当你一台Linux有了超过65535个进程,第65536个进程 无法启动! 独立的内存空间,独立的地址。 PID: 0:这个进程是真正的调度进程(idle进程),是系统初始化的第一个进程,是所有其他进程的祖先! 1:这个进程是Init进程,后续的系统启动,由0进程创建,第一个子进程,完成剩余的系统引导工作。 2:线程/进程 管理进程 PCB控制块 process control block 进程PCB是用来管理进程,维护进程属性的一个数据块 记录进程中的属性特征,进程的运行状态 没有合法PCB的进程,不会被操作系统所识别管理 PCB进程控制块中主要有以下: 进程标识符 PID。 调度信息:进程优先级 进程状态:挂起,就绪,执行,中断,僵尸。 进程使用的内存空间:文件,套接字(socket),网卡,硬件设备。 处理器信息:计数器,寄存器,指针。 进程的状态: R :就绪/运行 READY RUNNING 实际在CPU上运行的进程,可以被称作运行状态 接下来要执行的进程,处于就绪状态,那么也会被称作R S :可中断睡眠状态 进程去等待资源,等待别人链接,等待读取文件内容,等待打开硬件设备,CPU资源不够用 等待的进程,有专门的任务队列维护

进程基础

谁都会走 提交于 2019-12-21 00:19:59
什么是进程? 进程的概念:程序的一个执行实例,正在执行的程序。简单来说,比如你打开了一个APP这就是一个进程,在Linux系统下,在命令行一个ls的命令也是一个进程。从内核的角度来说,进程是担当分配系统资源(CPU时间,内存)的实体。 怎么描述进程 进程的所有信息都放在一个叫做进程控制块的数据结构中,称它为PCB。Linux操作系统下的PCB称为task_struct。 每一个进程都有一个task_struct,这个结构体用来描述一个进程,里面存放着进程的各种信息。进程的PCB用一个双向链表连接,当有进程创建,就在链表上添加一个task_struct,同样当一个进程销毁,就删除一个task_struct。那task_struct中的的具体内容又都包含哪些呢? task_struct 标识符:用来描述进程,每一个进程都有一个唯一的标识符,进程pid; 状态:任务状态,退出代码,退出信号等。 优先级:这么多进程,系统怎么知道先执行哪一个呢?所以当然要有优先级了,就是当前进程相对与其它进程的优先级。 程序计数器:程序中即将被执行的下一条指令的地址。 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。 上下文数据:进程执行时处理器的寄存器中的数据。 I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的 。 记账信息:包括处理器时间的总和

linux 进程1

你说的曾经没有我的故事 提交于 2019-12-21 00:17:04
一. 进程的开始和结束   1.1. main函数的调用     a. 编译链接时的引导代码。操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的问题,编译连接时(准确说是连接时)由链接器将编译器中事先准备好的引导代码给连接进去和我们的应用程序一起构成最终的可执行程序。     b. 运行时的加载器。加载器是操作系统中的程序,当我们去执行一个程序时(譬如./a.out,譬如代码中用exec族函数来运行)加载器负责将这个程序加载到内存中去执行这个程序。     c. 程序在编译连接时用链接器,运行时用加载器,这两个东西对程序运行原理非常重要   1.2. 进程如何结束     1.2.1. 在main(main函数由其父进程调用,故返回后进程就over)用return,一般原则是程序正常终止return 0,如果程序异常终止则return -1。     1.2.2. 一般终止进程(程序)应该使用exit或者_exit或者_Exit之一。     1.2.3. atexit注册进程终止处理函数     1.2.4. return、exit和_exit的区别:return和exit效果一样,都是会执行进程终止处理函数,但是用_exit终止进程时并不执行atexit注册的进程终止处理函数。     1.2.5.

Linux操作系统 进程之间的通信

孤人 提交于 2019-12-20 18:13:45
进程之间的通信 预备知识: 1、用户态和内核态,当一个进程在执行用户自己的代码时处于用户运行态(用户态);当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态)。 2、进程之间的通信(Inter Processs Communication- IPC )实现机制有:管道、消息队列、信号值、信号、共享内存、共享映射文件、套接字等。 3、及时通信:信号(类似中断);非及时通信:共享内存、邮箱、管道、套接字、 4、常见的信号:终止信号、定时器信号、用户自定义信号等 5、信号: 用户、系统或者进程 发送给 目标进程 的 信息 ,以通知目标进程某个 状态的改变 或 系统异常 。 6、 PCB(progress control block- 进程控制块),系统通过PCB,描述进程和控制进程。在Linux系统下,PCB是 task_struct结构体(进程描述符) 。   1、 进程状态 :记录进程是处于运行状态还是等待状态   2、 调度信息 :进程由哪个函数调度,具体怎样调度等   3、进程之间的 通讯状况   4、进程之间的 亲属关系 :在父进程和子进程之间有task_struct类型的指针,将父进程和子进程联系起来   5、 时间数据信息 :每个进程执行所占用CPU的时间   6、 进程的标志   7、 进程的标识符 :该进程唯一的标识符用来区别其他进程   8、

系统调用

痞子三分冷 提交于 2019-12-18 22:57:29
由前2篇文章做基础,现在可以理解系统调用了。 用户空间栈&系统空间栈 中断&异常 系统调用定义 系统调用是内核提供的一系列强大的函数。它们在内核中实现,然后通过一定的方式(X86是软中断,也即门陷入)呈现给用户,是用户程序与内核交互的接口。 注意,我们在程序中用调用read、write函数时,这些不是系统调用函数,而是glibc库包装后,进行一些处理,然后再调用系统调用。如果想在程序中直接调用 的 话,需要调用_syscall()函数。 上下文(context) 上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。 用户级上下文: 正文、数据、用户堆栈以及共享存储区; 寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP); 系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。 当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式 切换(mode switch)