并发编程-进程

1.进程

多个进程间需要协作完成任务,进行间的通信方式就是需要考虑的事项之一。进程间的通信方式被叫做IPC(Inter-Process Communication)。所有的IPC概念和使用方法只针对Linux系统

go语言支持的IPC方法有管道、信号和socket

1.1 定义

一个程序的执行成为一个进程,进程用于描述程序的执行过程。进程还是菜哦做系统进行资源分配的基本单位

1.2 衍生

进程使用fork(系统调用函数)可以创建若干个新的进程,其中前者成为后者的父进程,后者成为前者的子进程。子进程会获得父进程的数据段、堆和栈的副本,并与父进程共享代码块。每一份副本都是独立的,子进程对于属于它的副本的修改对其父进程和兄弟进程(同父进程)都是不可见的,反之亦然。

1.3 标识

Linux内核对每个进程的数据和行为进行详细的记录,包括进行的优先级、状态、虚拟地址范围以及各种访问权限等信息,这些信息都会被记录在每个进程的进程描述符中。保存在进程描述符中的进程ID(常称为PID)是进程在操作系统中的唯一标识。进程描述符中还会包含当前进程的父进程的ID(常称为PPID)

通过Go标准库代码包os可以来查看当前进程的PID和PPID。

1.3 标识

Linux内核对每个进程的数据和行为进行详细的记录,包括进行的优先级、状态、虚拟地址范围以及各种访问权限等信息,这些信息都会被记录在每个进程的进程描述符中。保存在进程描述符中的进程ID(常称为PID)是进程在操作系统中的唯一标识。进程描述符中还会包含当前进程的父进程的ID(常称为PPID)

通过Go标准库代码包os可以来查看当前进程的PID和PPID。

pid := os.Getpid()
ppid := os.Getppid()


内核可以高效地把进程ID转化为对应进程地描述符。可以通过shell命令种植某个进程ID所对应地进程,还可以通过进程ID找到对应地进程并向它发送信号。

1.4 状态

在Linux中,进程在每个时刻都是有状态的

1.5 进程空间

内存区域中的每一个单元都是有地址的,这些地址由指针来标识和定位,通过指针来寻找内存单元的操作也成为内存寻址。这里说的地址并非物理内存中的真实地址,而非虚拟地址。由虚拟地址来标识的内存区域又被称作虚拟地址空间,有时被称为虚拟内存。内核和CPU会负责维护虚拟内存与物理内存之间的映射关系。虚拟内存的最大容量与实际可用的五例内存的大小无关。下图是Linux操作系统最虚拟内存的划分。
在这里插入图片描述

1.6 系统调用

用户进程生存在用户空间中无法直接操作计算机的硬件,但内核空间中的内核可以。用户进程无法直接访问内核空间,内核会暴露一些接口以供他们使用,这些接口时用户进程使用内核功能的唯一手段。用户进程使用这些接口的行为被称为系统调用。系统调用是通过函数呈现的,但与普通函数有区别。系统调用是向内核空间发出一个明确请求,而普通函数只是定义了如何获取一个给定的服务。系统调用会导致内核空间中数据的存取和指令的执行,而普通函数却只能在用户空间有所作为。

内核态和用户态

为了保证操作系统的稳定和安全,内核依据由CPU提供的、可以让进程驻留的特权级别,建立了两个特权状态——内核态和用户态。大部分时间中,CPU处于用户态,这时CPU只能对用户空间访问。当用户进程发出一个系统调用时,CPU切换到内核态,执行对应的内核函数,函数执行完毕后,CPU在切回用户态,把执行结果返回给用户进程。

在这里插入图片描述

1.7 切换和调度

Linux操作系统可以凭借CPU快速地在多个进程之间切换,这也成为进程间的上下文切换

切换CPU的允许进程,内核必须要及时保存进程的运行时状态,且内核要保证要运行在CPU上的进程恢复到之前被换下时的运行时状态,这种在进程换出换入必须要做的任务统称为进程切换。

内核在考虑下次切换时运行哪个进程、何时进行切换、被换下的进程何时换上等问题,解决类似问题的方案和任务统称为进程调度。

进程切换和进程调度时多个程序并发执行的基础。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值