进程相关概念

程序和进程

程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)
进程:是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序(程序员角度),占用系统资源,分配资源的基本单位(操作系统角度)。在内存中执行。(程 序运行起来,产生一个进程)

进程与程序的关系

程序就好像剧本,而进程呢就像一台戏。
同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)

  1. 程序占用磁盘空间,不占用系统资源
  2. 进程占用系统资源
  3. 程序没有生命周期,进程有生命周期

并发

并发:在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之间的状态。但,任一个时刻点 上仍只有一个进程在运行。
例如,当下,我们使用计算机时可以边听音乐边聊天边上网。 若笼统的将他们均看做一个进程的话,为什么 可以同时运行呢,因为并发。

单道程序设计

所有进程一个一个排对执行。若 A 阻塞,B 只能等待,即使 CPU 处于空闲状态。而在人机交互时阻塞的出现时 必然的。所有这种模型在系统资源利用上及其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。
就是一群人排队,必须等前面人把事情处理完,前面人如果生病了或者突然有事走了,后面人不能办事,必须等前面的人回来办完才能轮到自己

多道程序设计

在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之下,相互穿插的运行。多道程序设计必 须有硬件基础作为保证。

时钟中断

即为多道程序设计模型的理论基础。 并发时,任意进程在执行期间都不希望放弃 cpu。因此系统需要 一种强制让进程让出 cpu 资源的手段。时钟中断有硬件基础作为保障,对进程而言不可抗拒。 操作系统中的中断
处理函数,来负责调度程序执行。

分时复用

在多道程序设计模型中,多个进程轮流使用 CPU(分时复用 CPU 资源)。而当下常见 CPU 为纳秒级,1 秒可以执 行大约 10 亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。 1s=1000ms,1ms=1000us,1us=1000ns 1000000000
实质上,并发是宏观并行,微观串行!

CPU和MMU


硬盘存储容量大,速度慢,磁盘把数据放到内存中,内存按理说可以直接把数据放到cpu中寄存器中去执行,但是为了提高效率,又在中间加了一个缓存Cache(缓冲区),通过Cache进入CPU

进到CPU中并不是整个程序,而是一条一条指令,以二进制形式处理,而从Cache进入CPU处理之前,要先经过预处理,编译,汇编,链接把程序中的每一条指令变为二进制

预取器

从cache中把指令取出来,交给译码器译码

译码器

分析指令干什么,要用什么寄存器

算术逻辑单元(ALU)

执行+,<<运算,所有的运算都是通过+,<<模拟出来。计算完后,把数据给CPU中的寄存器堆。再给缓存

MMU


两个相同的程序,运行两次,产生两个进程,用户块映射的物理内存不一样(因为进程彼此独立),但内核块映射的区域是一样的,PCB(进程描述符)位于内核空间当中,但是两个进程的PCB不一样,位于同一块物理内存里。

右边是虚拟地址空间,在程序运行时产生,虚拟内存其实不存在,所有的数据实际是放在内存条中,所以存在一个对映的关系,一个1GB的实际内存,如何编写出来4GB的虚拟内存?

虚拟地址,可用地址范围有4GB
例如:0x804a400 int a =10;//此时的地址是虚拟地址,它对应的实际地址是另外一个值
MMU就是帮忙对应虚拟地址和实际地址,也就是映射
另外一个问题,虚拟地址空间中,0~3GB是用户可以使用的大小,而3~4GB是内核空间,内核可以访问用户的空间,但用户访问不了内核的,但是实际内存中,并没有什么用户和内核的划分,所以需要有个东西来制定相应的访问权限的问题。
MMU设置修改内存访问级别的问题

进程描述符PCB

  1. 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息
  2. ,Linux 内核的进程控制块是 task_struct 结构体。
  3. /usr/src/linux-headers-3.16.0-30/include/linux/sched.h 文件中可以查看 structtask_struct 结构体定义。
  4. PCB中的主要成员如下
  • 进程 id。系统中每个进程有唯一的 id,在 C 语言中用 pid_t 类型表示,其实就是一个非负整数。

  • 进程的状态,有就绪、运行、挂起、停止等状态。

  • 进程切换时需要保存和恢复的一些 CPU 寄存器。

      这里说一下,之前说过,CPU分时机制,可以在一个进程突然有事,不能运行的情况下,再运行其他程序,等这个程序可以运行时再再次运行,所以CPU寄存器中就保存了这个程序在离开时的状态,等这个程序再次回来时恢复
    
  • 描述虚拟地址空间的信息。

     虚拟地址与物理地址的对应关系,MMU中使用一张表记录改信息,这张表MMU维护,存储在PCB中
    
  • 描述控制终端的信息。

  • 当前工作目录(CurrentWorkingDirectory)。

  • umask 掩码。 用来保护文件创建或者修改的权限

  • 文件描述符表,包含很多指向 file 结构体的指针。

  • 和信号相关的信息。

  • 用户 id 和组 id。

  • 会话(Session)和进程组。

  • 进程可以使用的资源上限(ResourceLimit) 。

进程状态

进程状态保存在PCB, 进程基本的状态有 5 种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常 与就绪态结合来看。

Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)相关推荐

  1. 【Linux系统编程】进程概述和进程号

    00. 目录 文章目录 00. 目录 01. 进程概述 02. 进程状态 03. 进程控制块 04. 进程号 05. 进程号相关函数 06. 案例实战 07. 附录 01. 进程概述 我们平时写的 C ...

  2. vbs结束进程代码_物联网学习教程—Linux系统编程之进程控制

    Linux系统编程之进程控制 一.结束进程 首先,我们回顾一下 C 语言中 continue, break, return 的作用: continue: 结束本次循环 break: 跳出整个循环,或跳 ...

  3. 【Linux系统编程】进程替换:exec 函数族

    00. 目录 文章目录 00. 目录 01. exec函数族 02. 参考示例 2.1 execl函数示例 2.2 execv函数示例 2.3 execlp() 或 execvp()函数示例 2.4 ...

  4. linux系统编程之进程(八):守护进程详解及创建,daemon()使用

    linux系统编程之进程(八):守护进程详解及创建,daemon()使用 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等 ...

  5. 【Linux系统编程】进程退出和回收进程资源

    00. 目录 文章目录 00. 目录 01. 进程退出函数 02. 进程退出讨论 03. 回收进程资源 04. 附录 01. 进程退出函数 #include <stdlib.h>void ...

  6. Linux系统编程之进程与线程控制原语对比

    Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...

  7. linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)

    系统编程: 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程 进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计 ...

  8. 【Linux系统编程】进程内存模型

    00. 目录 文章目录 00. 目录 01. Linux可执行程序结构 02. Linux进程结构 03. 存储类型总结 04. 附录 01. Linux可执行程序结构 在 Linux 下,程序是一个 ...

  9. 【Linux系统编程】进程介绍

    进程 我们平时写的 C 语言代码,通过编译器编译,最终它会成为一个可执行程序,当这个可执行程序运行起来后(没有结束之前),它就成为了一个进程. 程序是存放在存储介质上的一个可执行文件,而进程是程序执行 ...

  10. Linux系统编程——Daemon进程

    目录 Daemon进程介绍 前提知识 Daemon进程的编程规则 Daemon进程介绍 Daemon运行在后台也称作"后台服务进程". 它是没有控制终端与之相连的进程.它独立与控制 ...

最新文章

  1. 打造属于自己的图文符号库
  2. 健身励志——肌肉不经锤炼不会增长
  3. pyhton (一)基础
  4. spring代码异常捕获到logback logging.config=logback-spring.xml文件中不能输出异常e.printStackTrace...
  5. ArrayList和LinkedList使用不当,性能差距会如此之大!
  6. js求数组最大值方法汇总
  7. ibm 服务器 win7系统安装,最详细thinkpad win7系统重装教程
  8. 虚拟机vm安装 黑群晖 DS3617xs 6.2
  9. CRT设置LOG日志功能
  10. 数据恢复——在Windows 10中恢复永久删除的文件的5种方法
  11. android 获取单个通讯录联系人信息(无权限跳转权限设置页面)
  12. 新疆库尔勒市杜鹃河上演人禽共泳和谐相处画卷
  13. Kinect v2.0原理介绍之十三:面部帧获取
  14. 前端改变this指向的方法有哪些?如何判断this指向?
  15. 后台管理系统模板简介
  16. php feff,php编程中要留意的那些坑~
  17. pc屏幕与手机屏幕互相分享(幕享)
  18. MF_RC522及S50卡学习
  19. Windows服务 FLEXnet Licensing service 64
  20. Java项目:SSH电子相册管理系统

热门文章

  1. spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))...
  2. 优化Hibernate所鼓励的7大措施
  3. documentbodyscrollTop的值总为零的解决办法
  4. 360浏览器兼容问题
  5. 一个简单的python日志服务器
  6. java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO
  7. jmeter找不到java.dll_Windows下Jmeter安装出现Not able to find Java executable or version问题解决方案...
  8. java单例模式理解_快速理解Java中的五种单例模式
  9. 头同尾合十的算法_乘法速算之首同尾合十
  10. java构造函数_JAVA的构造函数是怎么写的。万分感谢。路过的请不要嘲笑%_%