Linux进程概念

一.冯诺依曼体系结构

 了解进程概念之前我们先来学习一下冯诺依曼体系结构

 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

 计算机的硬件体系结构

五大硬件单元:输入设备,输出设备,运算器,控制器,存储器
所有的设备都是围绕内存工作的
在这里插入图片描述
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成

 1.输入单元:包括键盘, 鼠标,扫描仪, 写板等

 2.中央处理器(CPU):含有运算器和控制器等

 3.输出单元:显示器,打印机等

举个栗子:当我们用qq发消息的时候,大致流程如下
在这里插入图片描述
关于冯诺依曼体系需要注意以下几点:
 1.这里的存储器指的是内存
 2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
 3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,所有设备都只能直接和内存打交道


二.操作系统

是什么:软件—管理计算机上的软硬件资源
定位:让计算机更加好用
在这里插入图片描述

管理:描述+组织

系统调用:操作系统向用户提供的用于访问内核的接口

库函数:针对典型功能的封装接口

库函数与系统调用的关系:库函数封装了系统调用接口


总结:
计算机管理硬件
 1.描述起来,用struct结构体
 2.组织起来,用链表或其他高效的数据结构




三.进程概念


 进程: 在用户的角度是运行的程序;在操作系统的角度是程序运行的动态描述--pcb,Linux操作系统下的PCB是: task_struct结构体(进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合);pcb其中包含程序运行的各项信息,实现操作系统对于运行中程序的管理。

3.1进程状态

描述进程当前处于什么状态
应该如何被操作系统调度管理

查看进程指令:ps -ef -aux
创建进程:pid_t fork(void)

种类:就绪,运行,阻塞

Linux分类:

 运行态-R:正在运行的,以及拿到时间片就能运行的

 可中断休眠态-S:可以被打断的阻塞状态

 不可中断休眠态-D:不可被打断的阻塞状态

 停止态-T:停止运行

 僵尸态-Z:程序退出后的中间等待处理状态


3.2三种常见进程

1.僵尸进程:

 僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,没有读取到子进程退出的返回代码时就会产生僵死(尸)进程。

 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

 避免:进程等待
 处理:退出父进程
 危害:资源泄露(内存+进程数量)

2.孤儿进程:
 孤儿进程:父进程先于子进程退出,子进程成为孤儿进程

 特性:运行在后台,父进程成为1号进程
 孤儿进程退出不会成为僵尸进程

3.守护进程:
 守护进程-精灵进程:是一个特殊的孤儿进程,运行在后台,与终端脱离关系。


四.环境变量

 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

 例如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

常见的环境变量

 PATH : 指定命令的搜索路径,程序的默认运行路径
 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
 SHELL : 当前Shell,它的值通常是/bin/bash。

环境变量相关指令
  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

环境变量的特性:具有进程之间的传递性

程序中获取环境变量的接口:

在这里插入代码片char *getenv(char *name);
   name:环境变量名称
返回值:对应name环境变量的数据,如果找不到返回NULL




五.程序地址空间

在这里插入图片描述

进程地址空间:每个进程都有一份;给每一个进程虚拟一个完整的地址空间;进程的虚拟地址空间。

虚拟地址空间:实际上就是一个地址空间的描述,本质上是一个结构体描述:struct mm_struct


注意: 虚拟地址和物理地址之间的转化由操作系统完成。


 操作系统给每个进程虚拟一个独立的完整的虚拟地址空间,让每一个进程都可以访问自己独立的连续的虚拟地址,但是实际的数据存储可以经过映射之后,可以存储到物理内存的任意位置不用连续,实现数据在物理内存上的离散式存储。
离散式存储提高了内存利用率!


 总结:程序地址空间,本质上是操作系统为进程通过mm_struct描述的虚拟的地址空间,让每个进程都能访问一个独立的完整的连续的虚拟地址,经过映射之后,实现在物理内存上的离散存储,提高内存利用率,提高了内存访问控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值