- 4.进程原理及系统调用
- task
- task_struct
- 进程优先级
4.进程原理及系统调用
task
Linux 内核把进程叫做任务 (task), 进程的虚拟地址空间可分为用户虚拟地址空间和内
核虚拟地址空间,所有进程共享内核虚拟地址空间--每个进程在用户态有独立的虚拟地址空间,但内核态的地址空间是映射到同一块(高地址部分)
在C语言标准库中和Linux内核进程的概念中,对于进程和线程有点不同,比较如下表:
C 语言标准库进程 | Linux 内核进程 |
---|---|
包括多个线程的进程 | 线程组 |
只有一个线程的进程 | 任务或进程 |
线程 | 共享用户虚拟地址空间的进程 |
看完上表后,再来理解下面这句话:
进程有两种特殊的形式:没有用户虚拟地址空间的进程叫内核线程,共享用户虚拟地址空间的进程叫用户线程,共享同一个用户虚拟地址空间的所有用户线程叫线程组
Linux 通过 'ps' 命令用于输出当前系统的进程状态。显示瞬间进程的的状态,并不是动态连续;如果我们想对进程进行实时监控就 'top' 命令。
task_struct
TASK_RUNNING状态
定义: 可运行状态或者可就绪状态,表示进程处于可执行的状态,可能正在执行或等待在就绪队列中。
注意: 在Linux内核中,TASK_RUNNING状态并不严格区分进程是否正在CPU上运行。
TASK_INTERRUPTIBLE状态
定义: 可中断睡眠状态,又称浅睡眠状态。进程进入睡眠状态等待特定条件或资源,条件满足时可被唤醒。
特性: 可通过信号中断睡眠状态,使进程重新进入就绪队列。
TASK_UNINTERRUPTIBLE状态
定义: 不可中断状态,又称深度睡眠状态。进程在睡眠等待时不受信号干扰,不响应任何信号。
查看方式: 可以通过ps命令查看被标记为D状态的进程,即处于不可中断睡眠状态的进程。
__TASK_STOPPED状态
定义: 进程停止运行的状态,通常由于接收到停止信号(如SIGSTOP)。
EXIT_ZOMBIE状态
定义: 僵尸状态,进程已经消亡但在进程表中仍有记录,父进程尚未调用wait()系统调用回收其资源。
注意: 僵尸状态进程占用内核资源,应及时处理以避免资源泄漏。
task_struct中值得注意的: state,pid,tgid,pid_links[PIDTYPE_MAX],real_parent,parent,group_leader,cred,real_cred,comm[TASK_COMM_LEN], prio,static_prio,normal_prio,rt_priority,cpus_ptr,mm,active_mm,fs,files等等等等