进程控制块

学习:计算机组成原理、进程

血红的双手。 提交于 2020-03-01 11:34:19
一、计算机组成原理 二、进程 1.进程概念:运行中的程序(程序是存储在磁盘上的二进制可执行文件),进程是 一组有序指令+数据+资源的集合—》动态概念 2.系统对于进程的管理–》PCB(进程控制块)。PCB进程,不断的产生,不断的结束;进程的调度—》检索 注意:新建一个进程,首先是申请PCB结构,然后再加载程序。 3.进程分类 (1)正常运行结束的进程; (2)僵死进程:进程实体执行结束,但是PCB依旧保存。 (3)孤儿进程:父进程结束,但是子进程依旧运行,则子进程就是孤儿进程。 4.进程的状态 5.时间片轮转法 (1)就绪:所有条件已经满足,只等着CPU空闲执行; (2)运行:CPU正在执行进程中的指令; (3)阻塞:等待某些条件的发生。 6.进程的加载过程—》简单分页,操作系统为每一个进程维护一个页表,页表记录程序的页号加载到内存上对应的帧号。 来源: CSDN 作者: 飞流直下 链接: https://blog.csdn.net/weixin_44737923/article/details/100855842

进程间通信---信号

僤鯓⒐⒋嵵緔 提交于 2020-02-28 18:18:11
信号的概念 信号在我们的 生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪 ...... 他们都有共性: 1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送。 信号是信息的载体, Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。 Unix 早期版本就提供了信号机制,但不可靠,信号可能丢失。 Berkeley 和 AT&T 都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。 POSIX.1 对可靠信号例程进行了标准化。 信号的机制 A 给 B 发送信号, B 收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。与硬件中断类似——异步模式。但信号是软件层面上实现的中断,早期常被称为“软中断”。 每个进程收到的所有信号,都是由内核负责发送的。 与信号相关的事件和状态 产生信号 : 1. 按键产生,如: Ctrl+c 、 Ctrl+z 、 Ctrl+\ 2. 系统调用产生,如: kill 、 raise 、 abort 3. 软件条件产生,如:定时器 alarm 4. 硬件异常产生,如:非法访问内存 ( 段错误 ) 、除 0( 浮点数例外 ) 、内存对齐出错 ( 总线错误 ) 5. 命令产生,如: kill 命令 递达 :递送并且到达进程。

进程

杀马特。学长 韩版系。学妹 提交于 2020-02-28 05:08:54
讨论的是操作系统在维护程序中,这个操作的过程是怎么样的。 一、关于进程的定义 进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。 二、进程的特点 动态性、并发性、独立性和制约型。(关键点在于进程的制约性和独立性怎么平衡) 三、进程控制块(PCB) 是操作系统管理控制进程运行所用的信息集合,操作系统用PCB来描述进程的基本情况以及运行变化的过程。 PCB是进程存在的唯一标识(每个进程在操作系统中,都有一个对应的PCB,进程结束后被操作系统回收) 进程创建则生成PCB 进程终止时回收PCB 进程的组织管理通过对PCB的组织管理来实现 进程的状态有进程等待、进程抢占、进程被唤醒、进程结束。 挂起:把一个进程从内存转到外存。 在内存时的转换状态有以下几种: 等待到等待挂起:没有进程处于就绪状态或者就绪进程要求更多的内存空间。 就绪到就绪挂起:当有高优先级等待,系统为了让高优先级有足够的内存空间,系统将低优先级的进程退到外存,挂起就绪。 运行到就绪挂起:对抢先式分时系统,当有高优先级等待挂起进程因实践出现导致运行就绪挂起 在外存时的转换状态有: 等待挂起到就绪挂起:当有等待挂起进程因相关事件出现。 激活:在外存的进程转到内存。 四、状态队列 由操作系统来维护一组队列,表示系统中所有进程当前的状态。 不同队列表示不同状态,包括就绪队列、各种等待队列。 根据进程状态不同

python中的进程、线程(threading、multiprocessing、Queue、subprocess)

末鹿安然 提交于 2020-02-28 01:12:36
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然。你做到了你就比别人NB。 我们先了解一下什么是进程和线程。 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块。 进程就是一个程序在一个数据集上的一次动态执行过程。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 在早期的操作系统里,计算机只有一个核心,进程执行程序的最小单位,任务调度采用时间片轮转的抢占式方式进行进程调度。每个进程都有各自的一块独立的内存,保证进程彼此间的内存地址空间的隔离。 随着计算机技术的发展,进程出现了很多弊端,一是进程的创建、撤销和切换的开销比较大,二是由于对称多处理机(对称多处理机

[轉]sendpage漏洞分析 CVE-2009-2692

我的未来我决定 提交于 2020-02-26 19:20:24
之前看了《 新爆内核高危漏洞sock_sendpage的利用分析的讨论 》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自 我的空间 )。 有什么不足之处还望多多指教~ 内核的BUG 这个BUG首先得从sendfile系统调用说起。 考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取 的数据send到socket中。这样,每次读写我们都需要两次系统调用,并且数据会被从内核拷贝到用户空间(read),再从用户空间拷贝到内核 (send)。 而sendfile就将整个发送过程封装在一个系统调用中,避免了多次系统调用,避免了数据在内核空间和用户空间之间的大量拷贝。 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); 虽然这个系统调用接收in和out两个fd,但是有所限制,in只能是普通文件,out只能是socket(这个限制不知道后来的内核版本有没有放宽)。 sendfile系统调用在内核里面是怎么实现的呢?这个还是比较复杂,它在内核里面做了原来要在用户态做的事情:创建一个pipe对象作buffer用、从in_fd中读数据到pipe中、将pipe中的数据写到out_fd

第 10 章 python进程与多进程

那年仲夏 提交于 2020-02-24 13:37:07
一、背景知识 顾明思义,进程即正在执行的一个过程,进程是对正在云的程序的一个抽象。 进程的概念起源与操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一,操作系统的其他所有内容都是围绕进程的概念展开的。 ps:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力,将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。 必备的理论基础: 1 #一 操作系统的作用: 2 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 3 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序 4 5 #二 多道技术: 6 1.产生背景:针对单核,实现并发 7 ps: 8 现在的主机一般是多核,那么每个核都会利用多道技术 9 有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个 10 cpu中的任意一个,具体由操作系统调度算法决定。 11 12 2.空间上的复用:如内存中同时有多道程序 13 3.时间上的复用:复用一个cpu的时间片 14 强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样 15 才能保证下次切换回来时,能基于上次切走的位置继续运行 二、python并发编程之进程 1、进程

进程、线程、并发执行的概念

本秂侑毒 提交于 2020-02-22 00:49:53
关于 进程 、线程、并发执行的概念,我们先来看下面的一段话: “一般来说,当 运行 一个应用程序的时候,就启动了一个 进程 ,当然有些会启动多个 进程 。启动 进程 的时候,操作系统会为 进程 分配资源,其中最主要的资源是内存空间,因为程序是在内存中 运行 的。 在 进程 中,有些程序流程块是可以乱序执行的,并且这个代码块可以同时被多次执行。实际上,这样的代码块就是线程体。线程是 进程 中乱序执行的代码流程。当多个线程同时 运行 的时候,这样的执行模式成为并发执行。” 下面我以一个日常生活中简单的例子来说明 进程 和线程之间的区别和联系: 这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“ 进程 ”的话,那么图中由白色虚线分隔开来的各个车道就是 进程 中的各个“线程”了。 ①这些线程(车道)共享了 进程 (道路)的公共资源(土地资源)。 ②这些线程(车道)必须依赖于 进程 (道路),也就是说,线程不能脱离于 进程 而存在(就像离开了道路,车道也就没有意义了)。 ③这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。 ④这些线程(车道)之间依靠代码逻辑(交通灯)来控制 运行 ,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。

Java多线程(三)

为君一笑 提交于 2020-02-13 22:35:08
个人博客 http://www.milovetingting.cn Java多线程(三) 前言 本文为学习Java相关知识所作笔记,参考以下资料: https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享! 线程基本方法 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用 wait()方法后,会释放对象的锁。因此,wait 方法一般用在同步方法或同步代码块中。 线程睡眠(sleep) sleep 导致当前线程休眠,与 wait 方法不同的是 sleep 不会释放当前占有的锁,sleep(long)会导致线程进入 TIMED-WATING 状态,而 wait()方法会导致当前线程进入 WATING 状态 线程让步(yield) yield 会使当前线程让出 CPU 执行时间片,与其他线程一起重新竞争 CPU 时间片。一般情况下,优先级高的线程有更大的可能性成功竞争得到 CPU 时间片,但这又不是绝对的,有的操作系统对线程优先级并不敏感。 线程中断(interrupt) 中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位

windows下进程与线程

寵の児 提交于 2020-02-12 10:38:39
windows下进程与线程 Windows是一个单用户多任务的操作系统,同一时间可有多个进程在执行。进程是应用程序的运行实例,可以理解为应用程序的一次动态执行;而线程是CPU调度的单位,是进程的一个执行单元。一个进程可以有多个线程,而一个线程只能从属于一个进程。 进程包含文本、数据、堆栈片段一级进程自身的资源(比如进程创建的文件、管道、同步对象等)。由操作系统负责管理进程及其资源,与进程相关的信息被保存在一个被称作进程控制块的结构中。 线程是操作系统分配CPU时间的基本实体。在一个多线程的应用程序中,每一个线程都有自己的堆栈,并且可以独立地操作同一程序中的其他线程。 一般来讲,操作对象是线程。 进程与线程的最大区别就是进程有自己的地址空间,而线程没有,线程共享进程的地址空间。进程内的两个线程可以访问同一个数据片段,因此,通过使用该数据片段可以实现线程间的通信。 线程间通信一 :全局变量,线程监督。利用volatile关键词修饰,要求编译器不要将该变量缓存到一个寄存器当中,即允许别的线程对该变量进行修改。操作过程就是在开启线程的时候令监督变量为1,同时在线程中监督此变量,然后当要关闭该线程的时候,在主程序(线程)中将监督变量改为0,因此,在线程函数中检测到该变量变为0之后,就退出。 线程间通信二 :采用消息机制。因为windows程序设计中,应用程序的每一个线程都拥有自己的消息队列

线程概念详解

心已入冬 提交于 2020-02-10 03:03:43
操作系统中线程和进程的概念: 进程 是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。 比如在Windows系统中,一个运行的exe就是一个进程。 动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位 异步性:每个进程都以相互独、不可预知的速度向前推进 结构特征:进程由程序、数据和进程控制块三部分组成。 线程 是指进程中的一个执行流程,一个进程中可以运行多个线程。 比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。 线程的五种状态: 新生状态(New):当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后, 此时该线程处于新生状态。 此时线程不是活着的(not alive); 就绪状态(Runnable):通过调用线程实例的start()方法来启动线程使线程进入就绪状态; 但还没有被分配到CPU,处于线程就绪队列;此时线程是活着的(alive); 运行状态(Running):一旦获取CPU,线程就进入运行状态,线程的run()方法才开始被执行; 如果在给定的时间内没有执行结束,就会被系统给换下来回到线程的就绪状态;