转自:https://zhuanlan.zhihu.com/p/37917981

这一章主要是对如下问题的解释。

1.Process(进程)是什么?

简单说process就是一个运行中的程序。

2.怎么去虚拟出很多CPU?

操作系统可以让一个进程运行,然后停止这个进程让另外一个进程运行,只要交替的时间足够快,使用者就觉得多个进程是在同时运行的。能够让这个过程实现的基本技术就是time sharing,这可以让cpu可以去实现上述进程的切换。

3.Process的主要组成部分有哪些?

1.Process对应的内存

2.寄存器

3.I/O

4.Process提供的API

1.create

2.destroy

3.wait

4.Miscellaneous control。比如暂停和恢复。

5.status

5.进程创建的更多内容

1.首先将磁盘上的程序加载到程序中,现代os不会一次性加载所有的代码,而是需要哪些就加载哪些。

2.分配stack内存,并且初始化

3.分配heap内存。

4.剩余的一些初始化操作,尤其是I/O相关的。UNUX系统会有默认的三个file description,分别是standard input,output,error。

5.将PC置为main代码处,开始执行。

6.进程状态

Running Ready Blocked

Running表示这个程序正在cpu上运行。

Ready表示程序可以随时被os调度运行。

Blocked表示进程在一些事件没有发生前不能运行。比如进程在等待I/O操作完成的时候。

7.Process 相关的数据结构

os也是程序,和其他的程序一样,也需要一些数据结构来保存各种各样的信息。对于进程,为了能够跟踪他们的状态并且能进行调度等动作,os也会创建相应的数据结构来保存进程的相应的信息。下面这个表格就是xv6内核的进程信息。在其他的操作系统,比如linux,mac os或者是wndows内,也有类似的数据结构,可以通过这个简单的例子来看下到底os要保存哪些进程的信息。

// the registers xv6 will save and restore
// to stop and subsequently restart a process
//这个就是在进程切换的时候需要加载和保存的寄存器
struct context {
int eip;
int esp;
int ebx;
int ecx;
int edx;
int esi;
int edi;
int ebp;
};
// the different states a process can be in
//一个进程不同的状态
enum proc_state { UNUSED, EMBRYO, SLEEPING,
RUNNABLE, RUNNING, ZOMBIE };
// the information xv6 tracks about each process
// including its register context and state
//xv6内核给每个进程保存的信息,包括寄存器信息和一些状态信息
struct proc {
char *mem; // Start of process memory//进程的开始内存地址
uint sz; // Size of process memory//进程需要的内存大小
char *kstack; // Bottom of kernel stack//内核栈底
// for this process
enum proc_state state; // Process state//进程状态
int pid; // Process ID//进程ID
struct proc *parent; // Parent process//父进程
void *chan; // If non-zero, sleeping on chan
int killed; // If non-zero, have been killed
struct file *ofile[NOFILE]; // Open files
struct inode *cwd; // Current directory
struct context context; // Switch here to run process
struct trapframe *tf; // Trap frame for the
// current interrupt
};

(转载)虚拟化(1):进程概述(The Process)的更多相关文章

  1. Android 进程生命周期 Process Lifecycle

    Android 进程生命周期 Process Lifecycle 进程的生命周期 Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,它会移除一些旧的进程. ...

  2. Linux高级编程--06.进程概述

    进程控制块 在Linux中,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,它通常包含如下信息: 进程id.系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非 ...

  3. Linux系统编程(7)—— 进程之进程概述

    我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体.现在我们全面了解一下其中都有哪些信息. 进程id.系统中每个进程有 ...

  4. APUE 2 - 进程组(process group) 会话(session) job

    进程组(process group) 进程组顾名思义是指一个或多个进程的集合.他们通常与同一个job(可以从同一个终端接收信号)相关联.每个进程组拥有一个唯一的Process Group Id.可以使 ...

  5. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

  6. python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)

    昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...

  7. UNIX高级环境编程(12)进程关联(Process Relationships)- 终端登录过程 ,进程组,Session

    在前面的章节我们了解到,进程之间是有关联的: 每个进程都有一个父进程: 子进程退出时,父进程可以感知并且获取子进程的退出状态. 本章我们将了解: 进程组的更多细节: sessions的内容: logi ...

  8. UNIX高级环境编程(11)进程控制(Process Control)- 进程快照,用户标识符,进程调度

    1 进程快照(Process Accounting) 当一个进程终止时,内核会为该进程保存一些数据,包括命令的小部分二进制数据.CPU time.启动时间.用户Id和组Id.这样的过程称为proces ...

  9. UNIX高级环境编程(9)进程控制(Process Control)- fork,vfork,僵尸进程,wait和waitpid

    本章包含内容有: 创建新进程 程序执行(program execution) 进程终止(process termination) 进程的各种ID   1 进程标识符(Process Identifie ...

随机推荐

  1. setcontext+orw

    setcontext+orw 大致可以把2.27,2.29做为两个分界点. 我们先来讨论 2.27 及以下的 setcontext + orw 的写法. 首先 setcontext 是什么?了解过 S ...

  2. jstack定位java程序CPU使用高问题

    top top -Hp 进程id printf "0x%x\n" 2769746 jstack 进程id [root ~]$ printf "0x%x\n" 2 ...

  3. MongoDB常用运维命令

    # 查看Mongodb版本信息 mongos> db.version() # 关闭mongodb服务 mongos> use admin mongos> shutdownServer ...

  4. Python 修改AD密码

    前提条件: AD 已开启证书服务(最重要的一句话). import ldap3 SERVER = 'adserver' BASEDN = "DC=example,DC=com" U ...

  5. 微信小程序笔记整理--入门篇。

    7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...

  6. 求Fibonacci数列通项公式

    0. Intro \[f_n=\begin{cases} 0 & (n=0) \\ 1 & (n=1) \\ f_{n-1}+f_{n-2} & (n>1) \end{c ...

  7. 从我做起[原生DI实现模块化和批量注入].Net Core 之一

    实现模块化注册 .Net Core实现模块化批量注入 我将新建一个项目从头开始项目名称Sukt.Core. 该项目分层如下: Sukt.Core.API 为前端提供APi接口(里面尽量不存在业务逻辑, ...

  8. sqlserver查出来的数据丢失

    问题描述 今天利用sqlserver查数据,使用了一个ROUND(308.16000, 2)函数,发现在sqlserver工具中显示正常,但是在服务端查出来就会发生精度丢失问题. ROUND和CAST ...

  9. JDK8 的 Lambda、Stream、LocalDate

    前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. 作者:虚无境 来源:cnblogs.com/xuwujing/ ...

  10. linux下core 相关设置

    1)core文件简介core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置 ...