认识process

  主要系统总结下我对进程的认识,以前理解得不够全面不够深入。本文肯定还不够好,当有新的认识新的理解后还会随时来更新。读完本文,下面几个问题便可理解清楚。

1.进程是什么?

2.为什么要有进程这个概念?

3.进程需要哪些成分?

4.进程怎么管理?

5.进程状态?

进程的定义

进程就是计算机程序被执行的实例。linux系统可以top命令查看进程,大部分人还是用windows,你应该有过电脑很卡的时候吧?这个时候怎么办?Ctrl+Alt+Del打开任务管理器,查看是哪个或哪几个进程占用了大部分的cpu,关掉后,你的电脑又开始流畅起来了。

为什么要有进程

  操作系统就是由很多程序代码组成的,只是非常复杂。一个程序的执行是这样的,首先,程序代码在辅助存储器(一般是硬盘)里,加载到主存(memory),cpu分配资源和处理器时间给机器码(代码最终都必须编译成机器码)。一个cpu只能执行一个程序,如果不采取诸如多线程之类的技术,计算机中那么多程序要使用cpu呢?虽然现在已经有多核cpu了,但是和程序的数量比,还是不够。那么多程序要争夺cpu使用权,是不是需要好好管理下,进程就是为了这个使命而诞生的,有了进程,管理和调度进入主存的程序就会比较方便。

进程的组成

进程由5部分组成:

(1)和程序相关的可执行的机器码的一个镜像;(代码的最终形态,就是一些指令的集合,只不过现在是0101)

(2)主存;(要存放code,data等)

(3)操作系统资源描述符;(文件描述符,数据来源等)

(4)安全属性;(英文叫security attributes,进程拥有者或进程权限)

(5)进程context;(寄存器的内容,物理内存地址等)

进程的管理

管理进程所需要的信息在process control blocks里面。这个数据结构在操作系统内核里。管理一个进程所需要的信息就存储在这个数据结构里面了。里面有哪些信息呢?

  (1)进程识别数据;

  (2)处理器状态数据;

  (3)进程控制数据。

  os就是通过进程识别数据(进程id)来识别不同进程,根据处理器状态数据和进程控制数据来管理进程。

进程的状态

Wating,Running,Blocked状态下的进程在主存里。

  当一个进程"Created"的时候,process就从辅助存储器加载到主存,process scheduler给process一个状态"Waitting"。之所以有个Waitting是因为要进入Running状态需要些准备工作,这个著名的准备工作叫context switch(就是上下文环境切换,一个进程的某个时刻的信息的记录),当scheduler完成context switch后,process就进入处理器,状态更新为"running",处理器执行指令。

  当一个进程需要等待资源(等待用户输入或打开文件)时,process就变为“blocked”状态,当等待的资源来到时,process就进入“watting”状态。

  当一个process完成任务或被用户强行中断,process就进入“Terminated”状态。主存里关于这个process的所有数据将被删除。

时间: 2024-10-27 17:36:01

认识process的相关文章

Process Kill Technology && Process Protection Against In Linux

目录 0. 引言 1. Kill Process By Kill Command 2. Kill Process By Resource Limits 3. Kill Process By Code Injection Into Running Process Via GDB 4. Kill Process By Using Cross Process Virtual Memory Modify 5. Kill Process By Using ptrace To Inject .so 6. P

centOS 7一个解决“network.service: control process exited, code=exited status=1”方法

今天早上2017-08-04,我打开虚拟机,使用远程工具xshell对虚拟机进行连接,我发现连接不上去,然后我ifconfig,发现找不到ens33了,就剩一个本地回环,看来是我的网络出现了问题,然后我查看我的网络状态,发现了如下情况: [[email protected] ~]# systemctl status network.service ● network.service - LSB: Bring up/down networking Loaded: loaded (/etc/rc.d

python pip fatal error in launcher unable to create process using

用pip安装一个包,不知道为啥,就报了这个错误:python pip fatal error in launcher unable to create process using “” 百度了一下,用下面的命令可以解决,搞定 python2 -m pip install XXX  另外,Python3 的pip我用python3 -m pip install --upgrade pip 搞定

MySQL 授予普通用户PROCESS权限

在MySQL中如何给普通用户授予查看所有用户线程/连接的权限,当然,默认情况下show processlist是可以查看当前用户的线程/连接的. mysql> grant process on MyDB.* to test; ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES 第一次授予这样的权限,错误原因是process权限是一个全局权限,不可以指定在某一个库上(个人测试库为MyDB),所以,把授权语句更改

ERROR   OGG-01668 PROCESS ABENDING.

oracle ogg 出现如下报错 ERROR   OGG-01172  Discard file (/ogg/oggrm/11.2/dirdat/repa.dsc) exceeded max bytes (2000000000). ERROR   OGG-01668  PROCESS ABENDING. 可以看出repa.dsc文件达到了最大值.导致错误是文件写满,大部分情况则是表同步出错,具体的错误可以通过查看OGG错误日志中看到. 解决办法如下: 1.repa.dsc文件的最大值可以在vi

JBPM工作流(八)——流程实例(PI)Process Instance

/** * 流程实例 *    *  启动流程实例 *    *  完成任务 *    *  查询 *      *  查询流程实例 *      *  查询任务 *          *  查询正在执行的任务 *            *  查询所有的正在执行的任务 *            *  根据任务的执行人查询正在执行的任务 *            *  根据executionId查询正在执行的任务 *            *  根据piid查询正在执行的任务 *         

receive和process的过程

(一) receive最终在fuse_kern_chan.c中的fuse_kern_chan_receive函数实现,使用系统调用读取 res = read(fuse_chan_fd(ch), buf, size); 其中fuse_chan_fd(ch)就是/dev/fuse, buf和size在fuse_loop_mt.c中fuse_do_work中定义. struct fuse_buf fbuf = { .mem = w->buf, .size = w->bufsize, }; 其中的fb

out of memory kill process (java) score or a child

最近在跑大数据,发现 out of memory kill process (java) score or a child,查资料发现是操作系统linux low mem 太低,后来加大内存一样不管用,开始分析代码: 将代码中的String 字符串拼接改成StringBuilder(单线程速度比StringBuffer快) 将获取文件名称的方法file.listFiles() 改成 file.list() 将代码中的不必要的创建对象.数组开销去掉,尤其是在循环里 发现仍然有问题,通过free -

System.Diagnostic.Process.Start vs System.Windows.Forms.Help.ShowHelp 打开CHM文件

CHM文件,Microsoft Compiled HTML Help,即"已编辑的帮助文件",包含一系列的HTML文件,index文件和其它的导航工具,经常作为产品的帮助文件[1]. 在.Net程序中,打开这种文件最简单的方式就是调用System.Windows.Forms.Help.ShowHelp()方法.根据MSDN,重载了四种调用方式[2].Control为父控件,string为Help文件的URL,HelpNavigator是一个枚举类型,可以采用Index或者Topic或者

System.Diagnostics.Process 执行.EXE

分类:  C#+WINFORM 2009-04-05 21:09 459人阅读 评论(0)  收藏  举报  我们经常会遇到在Winform或是WPF中点击链接或按钮打开某个指定的网址, 或者是需要打开电脑中某个指定的硬盘分区及文件夹, 甚至是"控制面板"相关的东西, 那么如何做呢? 答案是使用System.Diagnostics.Process.Start().它的作用是调用外部的命令. 先来看看它的调用方法: Process.Start ()  Process.Start (Pro