资讯专栏INFORMATION COLUMN

进程基本概念(转载)

waltr / 3106人阅读

摘要:详解进程在中的作用,组成,什么是父子进程系统是一个多进程的系统,它的进程之间具有并行性互不干扰等特点。中的进程包含个段,分别为数据段代码段和堆栈段。

1.什么是进程?

进程的经典定义是一个执行中程序的实例,同时也是资源分配的最小单元。系统中的每个程序都运行在某个进程中的上下文中,上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。

进程的生命周期:
创建: 每个进程都是由其父进程创建进程可以创建子进程,子进程又可以创建子进程的子进程
运行: 多个进程可以同时存在进程间可以通信
撤销: 进程可以被撤销,从而结束一个进程的运行

进程的分类:
交互进程、批处理进程和守护进程

进程的属性:
进程ID(PID):是唯一的数值,用来区分进程
父进程和父进程的ID(PPID)
启动进程的用户ID(UID)和所归属的组(GID)
进程状态:运行R、休眠S、僵尸Z

执行状态:进程正在占用CPU
就绪状态:进程已具备一切条件,正在等待分配CPU的处理时间片
等待状态:进程不能使用CPU,若等待事件发生则可将其唤醒

2.进程和程序的区别?

程序是放到磁盘的可执行文件,进程是指程序执行的实例;

进程是动态的,程序是静态的:程序是有序代码的集合。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制;

进程是暂时的,程序是长久的:进程是一个状态变化的过程,程序可长久保存;

进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)

进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。

3.详解进程在linux中的作用,组成,什么是父子进程?

Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。

也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。

Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段”

“数据段”存放的是全局变量、常数以及动态数据分配的数据空间;

“代码段”存放的是程序代码的数据。

“堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。

堆和栈的概念见博文——堆和栈。

父子进程:
父进程与子进程是管理与被管理的关系,当父进程终止时,子进程也随之终止;但子进程终止,父进程不一定终止

4.常用的进程管理工具,分别起什么作用?

ps、kill、pgrep

监视进程工具:

ps:aux或lax输出的解释

ps –aux |more分页查看

top 选择参数

终止进程的工具:

kill [信号代码] 进程ID

killall 正在运行的程序名

pkill 正在运行的程序名

xkill

pgrep查询进程工具:pgrep 参数选项 程序名

5.进程的三态之间的转换关系,常用的进程调度算法有哪些?用排队买票的例子对比

就绪->执行:处于就绪状态的进程->进程调度程序为之分配处理器->执行(排队买票轮到自己)

执行->就绪:处于执行状态的进程->分配的时间片用完让出处理器->就绪(正要买票发现车票时间未确定,让后面的人先买票)

执行->阻塞:正在执行的进程->等待无法继续执行->阻塞(买票时发现需要做其他重要的事而选择不买票)

阻塞->就绪:阻塞状态的进程->等待的事情发生->就绪(路过车站为别人买票,却未知车票详情,接到别人确切的车票时间而排队买票)

6.进程的调度算法有哪些?什么是优先级反转?

调度算法:

先来先服务调度算法

短进程优先调度算法

高优先级优先调度算法

时间片轮转法

优先级反转:

优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源。高优先任务由于因资源缺乏而处于受阻状态,一直等到低优先级任务释放资源为止。而低优先级获得的CPU时间少,如果此时有优先级处于两者之间的任务,并且不需要那个共享资源,则该中优先级的任务反而超过这两个任务而获得CPU时间。如果高优先级等待资源时不是阻塞等待,而是忙循环,则可能永远无法获得资源,因为此时低优先级进程无法与高优先级进程争夺CPU时间,从而无法执行,进而无法释放资源,造成的后果就是高优先级任务无法获得资源而继续推进。

7.什么是死锁?

死锁:多个进程因竞争资源而形成一种僵局若无外力作用,这些进程都将永远不能再向前推进

同步:一组并发进程按一定的顺序执行的过程称为进程间的同步

互斥:指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止

8.常见的面试问题:死锁的原因,如何解决?

死锁的四个必要条件(缺一不可):

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

死锁的解决办法:

(1)按同一顺序访问对象。

如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序

(2)避免事务中的用户交互。

避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。

(3)保持事务简短并在一个批处理中。

在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁

(4)使用低隔离级别。

确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺

(5)使用绑定连接。

使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28963.html

相关文章

  • CGI,FASTCGI,PHP-CGI,PHP-FPM 概念

    摘要:概念全称是通用网关接口,服务器与应用进行交谈的一种工具,其程序须运行在网络服务器上。开启之后,会看到多个进程,它们都由管理。一些进步修改配置后,平滑过渡,新的进程使用新的配置,正在运行的进程处理完当前请求后自动。 CGI(Common Gateway InterFace) 既然webserver想把这个请求交给可以处理的人来做,是不是该告诉人家一些基本的,并且人家看得懂的信息信息? W...

    jackzou 评论0 收藏0
  • 带着问题学 Kubernetes 架构

    摘要:又因为是谷歌出品的,依赖了很多谷歌自己的镜像,所以对于国内的同学环境搭建的难度又增加了一层。 带着问题学 Kubernetes 架构 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 打开这篇文章的同学,想必对 docker 都不会陌生。docker 是一种虚拟容器技术,它上手比较简单,只需在宿主机上起一个 docke...

    Allen 评论0 收藏0
  • 带着问题学 Kubernetes 架构

    摘要:又因为是谷歌出品的,依赖了很多谷歌自己的镜像,所以对于国内的同学环境搭建的难度又增加了一层。 带着问题学 Kubernetes 架构 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 打开这篇文章的同学,想必对 docker 都不会陌生。docker 是一种虚拟容器技术,它上手比较简单,只需在宿主机上起一个 docke...

    CodeSheep 评论0 收藏0
  • 操作系统进程与线程笔记

    摘要:进程与线程声明文章均为本人技术笔记,转载请注明出处进程线程基本概念进程程序的执行实体,操作系统分配资源的最小单位线程被称为轻量级进程,是调度分配的最小单位。一个标准的线程由线程,程序计数器,寄存器集合和堆栈组成进程间线程间通信方式进程间通信 进程与线程 声明 文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall 进程&线程基本概念 进...

    suxier 评论0 收藏0
  • Python Process/Thread 概念整理

    摘要:每个在同一时间只能执行一个线程在单核下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。在多线程下,每个线程的执行方式获取执行代码直到或者是虚拟机将其挂起。拿不到通行证的线程,就不允许进入执行。 进程与线程 并发与并行 进程与线程   首先要理解的是,我们的软件都是运行在操作系统之上,操作系统再控制硬件,比如 处理器、内存、IO设备等。操作系统为了向上...

    Youngs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<