有关进程的一些基本概念

  对进程的初步描述

 

一.和进程有关的一些概念

①一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器和变量的当前值。

从概念上说,每个进程拥有它自己的虚拟CPU,当然真实的CPU在各个进程之间来回切换。

 

②在某一瞬间,CPU只能运行一个进程,但在一秒钟时间他可以运行多个进程,这一就产生了并行的错觉,

通产这就是人们所说的伪并行。

 

③在伪并行状态下CPU在进程之间的快速切换称为多道程序设计。

 

④一个进程是某种类型的一个活动,他有程序,输入,输出以及状态,单个处理器可以被若干个状态进程共享,它使用某种调度算法

 

决定何时停止一个进程的工作,并转而为另外一个进程提供服务,值得注意的是一个进程如果运行了2遍则算作2个进程。

 

二.进程的创建

㈠有4种主要的方式创建进程

①系统初始化

②执行了正在运行的进程所调用的进程创建了系统调用

③用户请求创建一个新的进程

④一个批处理作业的初始化

 

㈡一些和进程创建有关的概念

①停留在后台诸如电子邮件,web页面,新闻,打印之类活动的进程称为守护进程

②在UNIX系统中,只有一个系统调用可以用来创建新进程:fork,这个系统调用会创建一个与调用进程相同的副本

③在windows中,情形正好相反,一个Win32函数调用CreatProcess既处理进程的创建,也负责把正确的程序装入新的进程。

④在UNIX系统中,子进程的的初始地址空间是父进程的一个副本,但这里涉及两个不同的地址空间,不可写的内存区是共享的

⑤在windows中,从一开始父进程的地址空间和子进程的地址空间就是不同的

 

三.进程的终止

进程通常有4种方式终止

①正常退出

②出错退出(自愿的)

③严重错误(非自愿)

④被其他进程杀死

 

多数进程是由于完成了他们的工作而终止,

Unix中该系统调用是exit,而在windows中相关的系统调用时ExitProcess

Unix中结束进程的系统调用是Kill,Win32对应的函数是TerminateProcess

 

四.进程的层次结构

某些系统中,当进程创建了另一个进程后,父进程和子进程就以某种形式继续保持关联,

子进程可以创建更多的进程,但注意的进程只有一个父进程,这与有性繁殖不同;

 

在Unix中,进程和他所有的子女以及后代共同组成了一个进程组,当用户从键盘发出一个信号时,该信号被送到当前与键盘相关的进程

组中的所有成员(他们通常是当前窗口创建的所有活动进程),每个进程可以分别捕获该信号,忽略该信号,忽略该信号或采取默认动作,

即该信号被杀死)

 

这里还有一个例子,可以用来说明进程的层次的作用,考虑UNIX在启动时如何初始化自己,一个称为Init的特殊进程出现在启动的映像

中,当它开始运行时,读入一个说明终端数量的文件,接着,为每个终端创建一个新的进程,这些进程等待用户的登录,如果有一个用户登

录成功,该登录进程就准备一个shell准备接受命令.所有接受的这些命令会启动更多的进程,以此类推,这样,在整个系统中都是以Init

为根的一颗树.

 

相反Windows中没有进程的层次概念,所有的进程都是地位相同的,唯一类似进程层次的暗示是在创建进程的时候,父进程得到一个特别的令牌(称为句柄),该句柄可以用来控制子进程,但是它有权把这个令牌传送给某个其他的进程,这样就不存在进程层次了,在Unix中,进程就不能剥夺其子女的"继承权".

 

五.进程的状态

①运行态

②就绪态

③堵塞态

 

1.运行--->堵塞---->进程为等待输入而堵塞

2.运行--->就绪---->调度程序选择另一个进程

3.就绪--->运行---->调度程序选择这个进程

4.堵塞--->就绪---->出现有效的输入

 

操作系统最底层的是调度程序,在它上面有许多进程,所有关于中断处理,启动进程和停止进程的具体细节都隐藏在调度程序中,那么是这样么?实际上,调度程序是一段非常短小的程序.操作系统的其他部分被简单的组织成进程的形式,不过很少有真实的系统是以这样理想的方式构造的.

 

六.进程的实现

(1)为了实现进程模型,操作系统维护着一张表(一个结构数组),即进程表(Process Table).

每个进程占用一个进程表项.(有的作者称这为进程控制块)

该表项包含了进程状态的重要信息,包括程序计数器,堆栈指针,内存分配状况,所打开的文件的状态,帐号和调度信息,以及其他在进程

中由运行态转换到阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过一样.

典型的进程表项中的一些字段

 

         进程管理               

         存储管理             

         文件管理              

 寄存器

正文段指针

 根目录                  

程序状态字

数据段指针    

工作目录

程序计数器

堆栈段指针

文件描述符

堆栈指针

用户ID

 

进程状态  

组ID

 

优先级

 

 

调度参数

 

 

进程ID

 

 

父进程 父进程

 

 

进程组

 

 

信号

 

 

进程开始时间

 

 

使用CPU时间

 

 

子进程的CPU时间

 

 

下次报警时间

                          

(2)在了解了进程表后,就可以对单个(或者每一个)CPU上如何维持多个顺序进程做出更多的描述

与每一个IO关联的是一个称为中断向量(interrupt vector)的位置(靠近内存底部的固定区域),它包括中断服务程序的入口地址.假设

当多个磁盘中断发生时,用户进程3正在运行,则中断硬件将程序计数器,程序状态字,有时还有一个或多个寄存器压入堆栈,计算机随机

跳转到中断所指示的地址,这些是硬件完成的所有操作,然后软件,特别是中断服务例程就接管剩余的工作.

 

所有的中断程序都从保存寄存器开始,对于当前进程而言,通常实在进程表项中,随后,会从堆栈中删除由硬件中断机制存入堆栈的那部

分信息,并将堆栈指针指向一个由进程处理程序所使用的临时堆栈,一些诸如保存寄存器值和设置堆栈指针等操作,无法用C语言这类高

级语言描述,所以这些操作通过一个短小的汇编语言例程来完成,通常该例程可以供所有的中断使用,因为无论中断是怎么样引起的,有

关保存寄存器的工作则完全是一样的.

 

当该例程结束后,他调用一个C过程处理某个特别定的中断类型剩下的工作,.在完成有关工作之后,大概就会使某些进程就绪,接着调用

调度程序,决定随后该运行哪个进程,随后将控制转给一段汇编代码,为当前的进程装入寄存器值以及内存映射并启动该进程运行,

当该进程结束时,操作系统显示一个提示符并等待新的命令,一旦它接到新命令,就能装入新的程序进入内存,覆盖前一个程序.

 

(3)中断发生后操作系统底层所做的一些事情

1.硬件压入堆栈程序计数器等.

2.硬件从中断向量装入新的程序计数器.

3.汇编语言过程保存寄存器值.

4.汇编语言过程设置新的堆栈,

5.C中断服务例程运行(典型的读和缓冲输入)

6.调度程序决定下一个将运行的进程

7.汇编语言过程开始运行新的当前进程

 

七.多道程序设计模型

设进程得到IO操作的时间与其停留在内存中的时间的比为P.当内存中同时有n个进程时(n也被称为多道程设计的道数),

CPU的利用率 = 1 - P的n次方

 

并行:进程和IO同步

并发:多个程序同步执行

一个计算的若干操作必须按照严格的先后次序顺序地执行,这类计算过程就是程序的顺序执行过程

 

(1)多道程序设计应该考虑到的3个问题:

1.存储保护

主存储器中同时存放了多个作业的程序,为了避免相互干扰,必须提供必要的手段使得主存储器中的各道程序只能访问自己的区域

2.程序浮动

程序可以随机的从主存储器的一个区域移动到另一个区域,程序被移动后,仍然不丝毫不影响他的执行,这种技术称为程序浮动

3.资源的分配和调度

 

(2)并行工作倒数与系统效率不成正比

1.主存储器空间大小限制了可同时装入的程序数量.

2.外围设备的数量也是一个制约条件

3.多个程序同时要求使用同一资源的情况也会经常发生

 

进程的一些基本的概念的笔记......备份....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第4章 maven依赖特性

第4章 maven依赖特性 本章详细介绍maven的依赖特性和依赖范围,如何排除依赖。 4.1 什么是依赖传递 举个例子 在非maven项目中,你需要使用spring功能,你会想到导入spring的jar包,那么,srping又需要其他依赖jar包支持&a…

lintcode :Integer to Roman 整数转罗马数字

题目 整数转罗马数字 给定一个整数,将其转换成罗马数字。 返回的结果要求在1-3999的范围内。 样例 4 -> IV 12 -> XII 21 -> XXI 99 -> XCIX 更多案例,请戳 http://literacy.kent.edu/Minigrants/Cinci/romanchart.htm 说明 什么是 罗马数字…

Win32ASm学习[1]:RadASm下测试Debug

okay 正文开始下面的代码如果不能编译 请把你的RadAsm下的Masm32这个文件夹复制到任意一个磁盘的根目录下,在进行编译就可以了 或者安装Masm32 SDK到任意磁盘根目录下 .386.model flat,stdcalloption casemap:none;>>>>>>>>>>&g…

关于javascript闭包

1.闭包的概念 闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。 所以,在本质上,闭包就是将函数内部和函数外部连…

Win32ASM学习[2]:运算符

算术运算符 名称 优先级 () 圆括号 1 ,- 正、负 2 *,/ 乘、除 3 MOD 取模 3 ,- 加、减 4 ------------------------------------------------------------------------------------------------------------------------------------------ .386 .mo…

正式入住了

从13年开始从事iOS开发工作,就准备写一些东西,记录这一路学习工作之旅,但是总是想着坚持不下来,也就慢慢的放弃了,开始用一些记笔记的软件,印象笔记用过,个人体验比较差,后来又用了OneNote,这个APP还是比较舒服,但是由于公司的老版mac-pro,无法使用,也就突然想起了,也是时候重出…

VRRP协议具体解释

转帖:http://blog.chinaunix.net/space.php?uid11654074&doblog&id2857384 Contents Page 文件夹 入木三分学网络…

Win32ASM学习[3]:局部变量

.386 .modelflat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc ;局部变量中的类型不能使用缩写 LOCAL v1: dword …

WPF笔记(1.1 WPF基础)——Hello,WPF!

WPF笔记(1.1 WPF基础)——Hello,WPF! 原文:WPF笔记(1.1 WPF基础)——Hello,WPF!Example 1-1. Minimal C# WPF application//MyApp.csusingSystem;usingSystem.Windows; //the root WPF namespacenamespaceMyFirstAvalonApp { cla…

c#入门系列——类和对象的代码实现

面向对象 说起面向对象,大家因该都听说过,也知道是一个编程的方法,简称oop技术。它将对象的算法和数据结构看作一个整体,而一个程序就是由多个对象结合的整体。这样做可以提高代码的复用率,提高了软件的可维护性。 属性…

安卓TCP通信版本2

PC做服务器,安卓做客户端。 安卓获取输入框的内容并发送,然后等待接收服务器的消息 服务器先行开启,接收到客户端的数据,然后回复消息。 实现了对线程类的封装,通过按钮启动线程发送并接收 服务器代码(java…

Win32ASM学习[5]: 数据对齐相关的伪指令(ALIGN、EVEN、ORG)

32 位的寄存器容量是 4 字节, 如果内存中的数据都按 4*n 字节对齐, 肯定会加快吞吐速度; 但事实并非如此, 不同大小的数据可能会让寄存器别别扭扭地去处理, 从而降低了运行速度! 如果使用对齐, 就会浪费掉一些内存空间; 其实这是一个需要权衡 "速度" 与 "内存&…

常用Jquery前端操作

input只能输入正整数 οnkeyup"this.valuethis.value.replace(/\D/g,)"if(!confirm("删除后无法恢复,确认继续?")){return false;}//判断字符串里是否存在指定字符 if(str.indexOf("abc") ! -1){//表示存在}1.双引号替换…

【Linux/Ubuntu学习 10】unbuntu 下 eclipse 中文乱码的解决

wangddwdd-pc:~$ gedit /var/lib/locales/supported.d/local 添加: zh_CN.GBK GBKzh_CN.GB2312 GB2312 终端执行命令: sudo dpkg-reconfigure --force localesGenerating locales... en_AG.UTF-8... done en_AU.UTF-8... done en_BW.UTF-8... done …

Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS

PTR: 指定要操作的数据尺寸 ------------------------------------------------------------------------------------------------------------------------------------------ .386 .model flat, stdcall include windows.inc include kernel32.inc include masm…

简述WebService的使用(一)

环境: vs版本:vs2013 windows版本:win7 IIS版本:IIS7.0 (如果觉得对您有用,请点击右下角【推荐】一下,让更多人看到,谢谢) 配置环境: 主要针对于IIS 首先&…

【Java基础】用LinkedList实现一个简单栈的功能

栈的基本功能 栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法。 构造存储对象Student /*** Created…

Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU)

关于符号常量 的例子 .386 .model flat,stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .data n 1 ; 伪指令只能定义整数或整数表达式…

oracle 删除表中重复记录,并保留一条

1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段(Id&#x…

透过WinDBG的视角看String

摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的. 本文将侧重在通过WinDBG来观察String在进程内的布局, 以此来解释C# String的一些特性. 问题 C# Stri…