Linux笔记 Linux中的进程

目录

准备阶段

冯 ·诺依曼体系结构

操作系统(Operator System)

操作系统概念

操作系统作用

操作系统的定位

系统调用和库函数

1.进程

基本概念:

1.1 描述进程-PCB

1.1.1 task_struct - PCB的一种

1.1.2 task_struct内容分类

1.2 组织进程

1.3 查看进程

 1.4 通过系统调用获取进程标识符

 1.5 通过系统调用创建进程 - - fork

1.6 进程状态 

1.6.1 来看看Linux内核源代码是什么样的

1.6.2 进程状态查看

 1.6.3 Z(zombie) - - 僵尸进程

 1.6.4 僵尸进程的危害

1.6.5 孤儿进程

1.7 进程优先级

1.7.1 基本概念

1.8 环境变量

1.8.1 基本概念

1.8.2 常见环境变量 

1.8.3  查看环境变量

1.8.4  环境变量相关命令

1.8.5 环境变量组织方式

1.8.6 通过系统调用接口获取环境变量

1.8.7 环境变量的全局属性

2 程序地址空间 

3.进程地址空间

分页&虚拟地址空间


准备阶段

冯 ·诺依曼体系结构


我们所熟知的大部分计算机都遵循冯·诺伊曼体系结构

 截至目前,我们认识的计算机,它们都由一个个硬件组成:

  • 输入单元:键盘,鼠标,磁盘,网卡等
  • 中央处理器(CPU):含有控制器,运算器等
  • 输出单元:显示器,音响,磁盘,网卡等

关于冯·诺依曼:

  1. 这里的存储器指的是内存
  2. 不考虑缓存情况,CPU只能对内存进行读写,不能访问外设(输入输出设备)
  3. 外设(输入和输出设备)要输入和输出数据,也只能通过内存

举个例子:登录qq,张三给李四发送消息 “你好”,“你好”这条消息从键盘输入到内存中,然后CPU经过一系列处理将“你好”还给内存,再由内存交给网卡通过网络发送给张三(具体怎么通过网络发送这里省略),张三通过网卡接收到内存中,再由CPU处理后进入内存,最后再由张三的显示器从内存中读取“你好”然后打印 

操作系统(Operator System)


操作系统概念

何计算机都有一个基本的程序集合,称为操作系统(OS)。笼统的说,操作系统包括:

  • 内核(进程管理,文件管理,内存管理,驱动管理)
  • 其他程序(如函数库,shell程序)

操作系统作用

  • 与硬件交互,管理好软硬件资源
  • 为用户程序提供一个良好的运行环境

操作系统的定位

操作系统就是一款搞 "管理" 的软件 

 管理是什么?六子真言:先描述,在组织

  • 描述:把一件事物描述起来,用struct结构体;
  • 组织:再用高效的数据结构组织起来

系统调用和库函数

  • 操作系统不相信任何人,但它又需要供用户使用。所以操作系统对外表示为一个整体,提供自己的部分接口,叫做系统调用。
  • 系统调用的功能比较基础,对用户的使用要求较高,所以有心的开发者对部分系统调用进行了适度封装,从而形成了库,有了库,对上层应用者和开发者开发提供了便利。

了解了这些知识后,那么一个操作系统是怎么管理一个个进程的呢?很简单,还是六字真言:

先描述,在组织。用一个结构体将进程描述起来,再用高效的数据结构将这些进程组织起来。

1.进程

基本概念:

课本概念:程序的一个执行实例,正在执行的程序

内核概念:担当分配系统资源(cpu时间,内存)的实体

1.1 描述进程-PCB

  •  进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
  •  课本上称为PCB(process control block),Linux操作系统下的PCB是:task_struct

1.1.1 task_struct - PCB的一种

  • 在Linux下描述进程的结构体叫做task_struct
  • task_struct是Linux内核的一种结构体,它会被装载到RAM(内存)里并且包含着进程信息

1.1.2 task_struct内容分类

  • 标识符:描述本进程的唯一标识符,用来区别其他进程

  • 状态:任务状态,退出代码,退出信号等

  • 优先级:相对于其他进程的优先级

  • 程序计数器:程序中即将被执行的下一条指令的地址

  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

  • 上下文数据:进程执行时处理器的寄存器中的数据

  • I/O状态信息:包括显示的IO请求,分配给进程的I/O设备和进程使用的文件列表

  • 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记帐号等

  • 其他信息

1.2 组织进程

可以在内核源代码里找到它,所以运行在系统里的进程都以task_struct链表的形式存在内核里

1.3 查看进程

进程的信息可以通过/proc系统文件夹查看

要获取进程pid为1的进程信息,需要查看/proc/1/这个文件夹

 大多数进程信息还可以通过ps和top这些用户级工具来获取

 

 1.4 通过系统调用获取进程标识符

  • 子进程ID:PID
  • 父进程ID:PPID
#include<iostream>
#include<unistd.h>
#include<sys/types.h>
using namespace std;

int main()
{
  cout << "you can see me" << endl;
 while(1)
  {
    pid_t id  = getpid();
    pid_t pid = getppid();
    cout << "我的pid是:" << id << endl;
    cout << "我的ppid是:" << pi
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值