Linux进程概念总结

这里总结下Linux进程概念总结❗ 

冯诺依曼:

  • CPU   运算器与控制器
  • RAM 内存(存储器)
  • Cache 缓存(一种技术)不属于冯诺依曼体系结构。
  • ROM 磁盘(输入输出设备)
  • 磁盘 既可以从硬盘读取数据也可以向硬盘写入数据。
  • 冯诺依曼体系结构中数据输入设备的有键盘/磁盘。
  • 冯诺依曼体系结构计算机的基本原理 存储程序和程序控制。

操作系统:

  • 计算机就是为了完成指定的数据处理,而通过指令按指定流程完成指定功能,指令的合集就是一段程序。说白了计算机就是按照指定的指令执行流程完成对指定数据的处理。

  • 操作系统:操作系统的定位就是控制和管理计算机上软硬件资源让计算机更加好用

  • 编译器:对汇编语言,高级语言和甚高级语言程序进行翻译,将高级语言解释为机器指令能够被机器识别执行。这不是操作系统的主要功能,而是一个外部应用的主要功能。

  • 源程序以及数据库文件都是存储在磁盘上的,这是操作系统中文件系统管理部分的主要功能。

系统调用:

  • 应用程序通过系统调用将自己需要完成的功能传递给内核,进行执行完成。

  • 系统调用的运行过程是在内核态完成的,操作系统并不允许用户直接访问内核,也就是说用户运行态并不满足访问内核的权限。(系统调用函数的执行过程应该是不在用户态)

  • 系统调用就是想上层提供用于完成特定内核服务或功能的。利用系统调用能够得到操作系统提供的多种服务。

  • 是操作系统提供给编程人员的接口。

  • 系统调用给用户屏蔽了设备访问的细节,用户只需要将自己的请求以及数据通过系统调用接口传递给内核,内核中完成对应的设备访问过程,最终返回结果正确。

  • 系统调用保护了一些只能在内核模式执行的操作指令,系统向上层提供系统调用接口用于访问内核服务或功能的很大原因也是因为这样可以最大限度的保护内核的稳定运行。

  • 库函数是用户对系统调用接口的进一步封装接口
  • printf函数是glibc中封装的用于实现格式化输出的接口
  • scanf函数是glibc中封装的用于实现格式化输入的接口
  • fgetc函数是glibc中封装的用于实现从输入流中获取字符的接口
  • read是系统提供的用于从输入设备获取数据的接口
  • print_s以及scan_s这两个函数不存在,至少在C语言的常见典型的跨平台移植代码库中不存在。
  • fgetc是系统调用而不是库函数

 Linux的进程:

  • 僵尸进程指的是进程退出后不会完全释放资源,会造成系统资源泄漏。
  • 孤儿进程的父进程在它之前退出,会被 init 进程接管,不会造成资源浪费。
  • 孤儿进程在父进程退出后,父进程成为init进程,进程退出,孤儿进程的资源将被init进程释放。
  • 操作系统通过pcb实现对程序运行调度控制。
  • fork系统调用通过复制父进程创建一个子进程,父子进程数据独有,代码共享(在数据不发生改变的情况下父子进程资源指向同一块物理内存空间(调研写时拷贝技术))
  • 子进程如果对资源只是进行读操作,那么完全和父进程共享物理地址空间。
  • 进程是资源管理的最小单位,而线程是程序执行的最小单位。Linux 下的线程本质上用进程实现。

在抢占式多任务处理中,进程被抢占时,哪些运行环境需要被保存下来?

  • ✔所有cpu寄存器的内容/全局变量/程序计数器
  • 所有cpu寄存器的内容 cpu上正在处理的数据
  • 全局变量  程序内的数据(并不一定正在被处理)
  • 页表指针 程序切换时会将页表起始地址加载到寄存器中
  • 程序计数器 下一步程序要执行的指令地址

  • 一个程序可以同时运行多次,也就有了多个进程。❌进程与程序是一一对应的。
  • 因为一个作业任务的完成可由多个进程组成,且必须至少由一个进程组成。❌进程与作业是一一对应的。
  • 进程是静态的。因为程序是静态的,而进程是动态的。
  • 进程是动态的过程。❌

进程PCB

  • 进程是操作系统对于程序运行过程的描述,而这个描述学名叫做进程控制块-PCB,它是操作系统操作系统管理以及调度控制程序运行的唯一实体。
  • 进程ID只是进程的标识符,是系统能够找到特定进程的标识而已。
  • 进程管理器只是对大量PCB进行管理的一个程序而已。
  • 进程本质上来说没有名字,它有所调度管理运行的程序的名称,它的标识是进程ID,可以理解进程ID是它的名字。
  • 在系统角度看来,进程就是对于程序运行的描述,就是PCB进程控制块。

❓考察fork创建子进程的过程, 同时理解fork函数的返回值

❓要求: 通过父子进程的返回值, 区分父子进程执行的逻辑, 重点:理解子进程为什么从fork函数调用之后开始执行

Linux进程状态:

☞僵尸进程:

  • 僵尸进程是指先于父进程退出的子进程程序已经不再运行。
  • 但是因为需要保存退出原因,因此资源没有完全释放的进程,会造成内存泄露问题。
  • 它不会自动退出释放所有资源,也不会被kill命令再次杀死。
  • 僵尸进程会产生资源泄露,需要避免避免僵尸进程的产生采用进程等待(wait/waitpid)方式完成。
  • 僵尸进程会造成资源泄露,必须使用wait/waitpid接口进行等待处理。
  • 僵尸进程不会完全释放资源退出。
  • 僵尸进程是已经退出运行的进程,无法被杀死。
  • 僵尸进程是子进程先于父进程退出。(父进程没有等待)
  • 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
  • 僵尸进程:子进程先于父进程退出,父进程没有对子进程的退出进行处理,因此子进程会保存自己的退出信息而无法释放所有资源成为僵尸进程导致资源泄露。
  • 僵尸进程的产生就是因为父进程没有对子进程的退出进行处理,因此子进程无法完全释放资源。

☞孤儿进程:

  • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。(父进程先于子进程退出)父进程退出后,所有子进程都会成为孤儿进程。
  • 孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程(而孤儿进程的退出,会被1号进程负责任的进行处理,因此不会成为僵尸进程)
  • 孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
  • 孤儿进程和僵尸进程都可能使系统不能产生新的进程,都应该避免❌,孤儿进程无需特殊处理。
  • 僵尸进程的产生会造成资源泄露需要避免,但是孤儿进程的产生一般都是具有目的性的,并且退出后并不会成为僵尸进程,因此无需特殊处理。
  • 子进程成为孤儿进程后被1号进程收养,并且他们的退出状态由1号进程完成处理。
  • 孤儿进程:子进程先于父进程退出,运行在后台,父进程成为1号init进程(在centos7中1号进程改名为systemd进程),退出后由1号进程回收资源。
  • 孤儿进程:子进程先于父进程退出,运行在后台,父进程成为1号进程,退出后由1号进程回收资源,因此不会成为僵尸进程,而是直接释放所有资源。

  • 孤儿进程的产生一般都会带有目的性,比如我们需要一个程序运行在后台,或者我们不想一个进程退出后成为僵尸进程之类的需要。

  • 父进程先于子进程退出,子进程就会成为孤儿进程。

  • 孤儿进程退出不会成为僵尸进程,因此也不会资源泄露。

  • 孤儿进程是运行在后台的。

  • 孤儿进程也有父进程,父进程是1号进程

  • syslogd:系统中的日志服务进程。
  • init:init进程是内核启动的第一个用户级进程,用于完成处理孤儿进程以及其他的一些重要任务。
  • sshd:远程登录服务进程。
  • vhand:内存置换服务进程。

  • 僵尸进程:子进程先于父进程退出,父进程没有对子进程的退出进行处理,因此子进程会保存自己的退出信息而无法释放所有资源成为僵尸进程导致资源泄露。
  • 孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程(而孤儿进程的退出,会被1号进程负责任的进行处理,因此不会成为僵尸进程)
  • 守护进程&精灵进程:这两种是同一种进程的不同翻译,是特殊的孤儿进程,不但运行在后台,最主要的是脱离了与终端和登录会话的所有联系,也就是默默的运行在后台不想受到任何影响。(精灵进程其实和守护进程是一样的,不同的翻译叫法而已,它的父进程是1号进程,退出后不会成为僵尸进程)
  • 守护进程:运行在后台的一种特殊进程,独立于控制终端并周期性地执行某些任务。

❓考察僵尸进程的概念, 以及查看进程的命令ps。

❓要求:使用代码模拟产生僵尸进程的过程, 使用ps命令可以查看僵尸进程

❓考察孤儿进程的概念, 以及如何使用ps命令查看当前进程的父进程的pid

❓要求:使用代码模拟产生孤儿进程的过程, 使用ps命令可以查看孤儿进程的父进程是1号进程

进程的环境变量和虚拟地址空间

  • ~/.bash_profile:用户级的环境配置文件,每个用户目录下都会具有各自的,在用户每次登录系统时被读取,里面所有命令都会被shell执行。包括环境变量的配置命令。
  •  /etc/progile.d: 这是个目录或者说文件夹,其中包含了系统级的环境配置文件,任意用户登录时都会执行这个目录下的环境配置文件完成环境配置,但是要注意这个是目录并不是保存环境变量配置的配置文件。
  • 使用shell时,默认的环境变量放在~/.bash_profile
  • echo 用于输出打印一个变量的内容,包括环境变量
  • env 用于打印所有环境变量信息
  • set 用于输出打印所有环境配置以及变量信息,不限于环境变量
  • export用于设置环境变量
  • 查看环境变量的命令echo / env / set
  • 子进程默认会复制拥有与父进程相同的环境变量。
  • 环境变量设置之后,不需要重启shell,也不需要重新加载文件,只要设置换环境变量就能直接生效,因此可以使运行环境的配置更加灵活简单。
  • 环境变量可以使用export命令设置。
  • 删除一个环境变量可以使用unset命令。rm只是普通的文件操作指令,无法删除环境变量
  • 在CPU和物理内存之间进行地址转换时,MMU将地址从虚拟(逻辑)地址空间映射到物理地址空间。

  • TCB 线程控制块

  • MMU 内存管理单元,一种负责处理中央处理器(CPU)的内存访问请求,功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制

  • CACHE 高速缓存

  • DMA 直接内存存取

  • 局部变量存储在栈区

  • 空间中存储的地址指向的是一块常量字符串的地址,常量字符串存储在只读存储区

 🙂感谢大家的阅读,若有错误和不足,欢迎指正。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Linux系统中,每个进程都有一个优先级,用于确定在系统上运行时获取CPU时间片的相对频率。进程的优先级通常是动态调整的,可以根据进程的行为和系统的负载进行调整。优先级较高的进程在CPU时间片分配时获得更多的时间,因此它们通常可以更快地完成其任务。Linux系统中的进程优先级范围为-20到19,数值越小表示优先级越高。可以使用nice和renice命令来调整进程的优先级。 ### 回答2: 在Linux中,进程优先级用来确定进程在竞争CPU资源时的调度顺序。Linux使用了动态优先级调度算法,进程的优先级可根据其行为和需求进行动态调整。 Linux中,进程被分为实时进程和普通进程两种类型,每种类型都有其自身的优先级范围。实时进程的优先级取值范围为1-99,值越大表示优先级越高。普通进程的优先级取值范围为100-139,值越小表示优先级越高。 进程的优先级可以通过nice值进行设置。nice值的取值范围为-20到19,数值越小表示优先级越高。通过nice命令可以改变进程的nice值,提高或降低进程的优先级。 Linux中还有一个称为实时优先级的概念,用于控制实时进程的优先级。实时进程的优先级可以通过sched_setscheduler函数进行设置,具有更高优先级的实时进程可以抢占较低优先级的实时进程和普通进程。 在Linux进程调度中,绝大多数情况下,优先级高的进程会优先获得CPU资源,而优先级较低的进程则会相对较少获得CPU时间。但是,进程优先级并不是唯一确定进程调度顺序的因素,还与进程当前的状态、调度策略、CPU负载等综合考虑。 总结而言,Linux进程优先级用来确定进程的调度顺序,取决于进程的nice值和实时优先级。不同优先级的进程会获得不同的CPU时间片,从而影响系统的性能和响应速度。 ### 回答3: Linux进程的优先级是指操作系统对不同进程分配处理器时间片的优先级。Linux进程的优先级共有140个级别,范围从-20到19,其中-20表示最高优先级,19表示最低优先级。 进程的优先级决定了它在竞争CPU资源时获得处理器时间的顺序。优先级较高的进程能够更频繁地获得CPU资源,提高了它们的执行速度和响应能力,而优先级较低的进程则相对减少了CPU的利用。但要注意,优先级并不直接决定进程的执行顺序,而是通过调度算法来决定哪个进程获得处理器时间。 Linux分别为实时进程和普通进程设置不同的调度策略。实时进程具有更高的优先级,能够实时响应请求,适用于对响应时间要求较高的系统,如实时音频或视频处理。而普通进程的优先级较低,更多地用于一般的计算或批处理任务。 通过调整进程的优先级,可以实现对不同任务的调度控制。管理员可以使用nice命令或renice命令来为进程设置优先级,提高或降低其执行的权重。较高优先级的进程将更加频繁地获得CPU资源,从而提高其执行速度和响应能力。 总之,Linux进程的优先级是操作系统为不同进程分配处理器时间的一种机制,决定了它们在竞争CPU资源时的顺序。通过设定不同的优先级,可以实现进程的调度控制,提高系统的执行效率和响应能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐唐思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值