进程部分相关概念

进程


进程是一个程序执行的过程,会去分配内存资源,cpu的调度

进程不仅仅是一个正在运行的程序,它包含了程序执行所需的所有资源和状态信息

  • 资源分配:操作系统会为每个进程分配必要的资源,如内存空间、文件句柄等。这些资源保证进程能够正常执行。

  • CPU调度:操作系统通过调度程序(scheduler)决定哪个进程在某一时刻占用CPU。因为CPU资源是有限的,多个进程需要轮流使用CPU,因此操作系统会频繁地切换进程。

  • 程序执行状态:进程不仅仅是代码,它还包含了程序的执行状态,如程序计数器、寄存器内容等。这些信息能够帮助操作系统在暂停进程后继续其执行。

  • 进程控制块(PCB):进程控制块是操作系统用来描述和管理进程的一个数据结构。它包含了与进程相关的所有信息,包括进程ID、进程状态、程序计数器、内存管理信息、文件描述符等。PCB是操作系统管理进程的核心部分。pcb  是一个结构体,process control block  print circuit board

  • task_struct结构体:在Linux操作系统中,每个进程都通过一个task_struct结构体来描述。task_struct中包含了与进程相关的各种信息,包括进程状态、优先级、CPU时间、内存管理信息等。它是Linux内核中用来管理进程的关键数据结构。

  • PID (Process Identifier):

    • PID 是进程标识符,每个进程都有一个唯一的 PID,操作系统通过 PID 来区分和管理不同的进程。PID 在操作系统中是唯一的,即在同一时刻不会有两个进程拥有相同的 PID。
  • CWD (Current Working Directory):

    • CWD 是当前工作目录,即进程当前操作的目录路径。每个进程都有一个与之关联的当前工作目录。通过调用 chdir 函数来更改当前工作目录。例如,如果一个进程的 CWD 是 /home/user/, 那么这个进程在打开一个相对路径文件 file.txt 时,会默认在 /home/user/file.txt 这个路径下寻找文件。
  • umask:

    • umask 是一个控制新建文件和目录权限的掩码。当一个文件或目录被创建时,系统会根据默认的权限(通常是 666 对文件,777 对目录)减去 umask 的值来设置实际的权限。例如,umask 0002 意味着新创建的目录的权限为 775 (即 777 - 2)。
  • 进程打开的文件列表:

    • 每个进程都有一个文件描述符表,其中记录了该进程当前打开的所有文件。文件描述符用于标识和操作文件。通过 /proc/[PID]/fd 可以查看某个进程打开的文件列表。
  • 信号相关设置:

    • 信号是进程间通信的一种机制,用于向进程发送通知或控制指令。Linux 系统中有 64 种标准信号,每种信号有不同的含义,例如 SIGINT(中断)、SIGTERM(终止)、SIGKILL(强制终止)等。信号处理函数可以用来定义进程在接收到某个信号时应该如何响应。
  • 用户 ID 和组 ID:

    • 每个进程都关联着一个用户 ID(UID)和组 ID(GID),用于控制进程的权限。UID 表示该进程所属的用户,而 GID 表示该进程所属的用户组。通过这些 ID,操作系统可以控制进程的文件访问权限和其他操作权限。
  • 进程资源的上限:

    • 操作系统可以对进程使用的资源设置上限,以防止某个进程占用过多的系统资源。ulimit 命令可以用来查看和设置这些资源的上限。例如,ulimit -a 命令可以显示当前进程的各种资源限制,如最大文件大小、最大内存使用量、最大进程数等。

  • Open Files:

    • 进程能够同时打开的文件数量是有限的,这个限制通常由操作系统设定。对于大多数系统来说,这个上限值默认是 1024。这意味着一个进程在同一时间最多可以打开 1024 个文件。这一限制包括标准输入、输出和错误流,以及通过系统调用打开的文件或设备。
    • 如果需要打开更多的文件,可以通过修改系统设置或使用 ulimit -n 命令来调整这个值。不过,需要注意的是,过多的打开文件可能会导致资源枯竭或影响系统性能。
  • Stack Size (栈大小):

    • 栈是每个进程在内存中分配的一块区域,用于存储函数的局部变量、参数、返回地址等。每个函数调用都会将数据推入栈中,而函数返回时,数据会从栈中弹出。
    • 栈的大小也是有限的,默认值通常是 8MB,但这取决于具体的操作系统和配置。栈大小限制意味着在递归深度过大或使用大量局部变量时,可能会遇到栈溢出(stack overflow)的问题。
    • 可以通过 ulimit -s 命令来查看或设置进程的栈大小限制。如果程序需要更大的栈空间(例如在深度递归或大量局部数据的情况下),可以增大这个限制,但要小心,过大的栈可能会导致系统内存不足。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值