转自: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. python使用range()函数创建数字列表list

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 numbers=list(range(1,6)) print(numbers) range指定步长: #!/usr ...

  2. c#代码设计:子类和父类

    哭辽,事情是这样的 我想写个产品类用来放点相机参数,想类似这种的使用方式:(时间关系不改了,产品=Zoo,animals=相机) Zoo Zooxx= new Zoo (); Zoo.Animals ...

  3. ForkJoinPool简单使用

    简介 ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个"小任务",把多个"小任务"放到多个处理器核心上并行执行, ...

  4. JFrame 的层次结构 及 背景设置说明

    感谢原文:https://blog.csdn.net/qq_32006373/article/details/49659129 一.JFrame 的层次结构 我们通过两个图来说明一下 JFrame 的 ...

  5. Spring Boot配置多个DataSource (转)

    使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 如果在application.yml中指定了spring ...

  6. Redis-46面试题

    1.什么是 Redis?简述它的优缺点? Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据 ...

  7. 推荐的php安全配置选项

    推荐安全配置选项 这里有几个会影响安全功能的 PHP 配置设置.下面是一些显然应该用于生产服务器的: register_globals 设置为 offsafe_mode 设置为 offerror_re ...

  8. IOS scrollView 图片浏览

    // // ViewController.m // 0426 // // Created by apple on 15/4/26. // Copyright (c) 2015年 gense. All ...

  9. kubeadm/flannel/dashboard/harbor部署以及服务发布

    kubeadm/flannel/dashboard/harbor部署以及服务发布 目录 kubeadm/flannel/dashboard/harbor部署以及服务发布 一.部署kubeadm 1. ...

  10. Docker prefereces

    https://docs.docker.com/docker-for-mac/#preferences-menu docker 的镜像命令需要抽时间了解