linux 进程

川长思鸟来 2022-03-25 05:51 370阅读 0赞

进程:运行中的程序(打开的文件,挂起的信号,内存,执行线程等等)
线程(pc,寄存器(线程需记录cpu寄存器的值,以挂起后恢复执行),栈),调度对象,在liux里是特殊进程
虚拟处理器/内存:让进程觉得自己独占处理器或内存。
fork:通过复制来创建(除pid,ppid,某些资源统计量如挂起的信号外其他都复制),内核返回两次(父进程恢复执行,子进程开始执行)
写时拷贝:fork时父子进程指向同样物理内存,任一方想要修改(写入),实际分配内存,指向不同物理内存
A,B(子)有各自的内存描述符(页表),只不过页表指向相同物理内存,B想修改某页x,为x分配物理内存并拷贝内容,在新物理内存上修改
一般让子进程先执行,子进程一般会exec,根本不会发生拷贝,子进程不exec(难道子进程想和父进程运行同一程序,且在父进程当前的运行进度上)
拷贝和共享:线程一般共享(如指向同一内存描述符),进程一般拷贝(各自拥有自己的,只是开始是一样的)
fork(sys_fork)创建进程,最终do_fork,进程终止给父进程发SIGCHLD信号
clone(sys_clone)创建线程,最终do_fork, 共享地址空间(指向同一内存描述符),文件系统信息,文件描述符(打开的文件),信号处理函数
vfork(sys_vfork)类似线程,最终do_fork, 共享地址空间,发SIGCHLD,父进程等待子进程将其唤醒(子进程调用exec或调用exit退出)
内核线程:只能由内核线程创建,运行在内核空间,内存描述符为null,借其它进程的内存描述符,可被调度
exec:创建新地址空间,载入新程序,代码(程序)在文件(磁盘)上,载入内存,地址空间映射到这部分内存上,可能出现多对一映射(多个进程运行同一程序,内存放一份代码,各进程都映射到它)
exit:显式调用exit,或编译器自动帮你在main返回点加exit,某些信号或异常
内存描述符/文件描述符/文件系统信息 引用计数减1,为0则释放(存在共享的情况,如线程)
给父进程发SIGCHLD信号,给子进程找养父(进程组其他进程或init),僵死状态,schedule

僵死状态: 只有内核栈,thread_info,task_struct,父进程获取信息或通知内核它不关注后,完成最后清除
实现:父进程wait或waitpid,可以阻塞也可以轮询,当然有些父进程调用的少(导致子进程长期处于僵死状态),可以考虑SIGCHLD信号处理函数内调用wait(平常我不调用,你给我发信号我给你收尸,你是我儿子嘛)

任务队列:进程的双向循环链表
task_struct(进程描述符):通过slab分配(对象复用和缓存着色,存在多个slab,每个slab有多个已分配内存的结构),含数据如下
pid
state
运行:可运行的,在用户或内核空间
可中断:睡眠/被阻塞,可被信号唤醒(类似java里的中断)
不可中断:不可被信号唤醒(类似java里的synchronized,不响应中断)
跟踪:被其他进程跟踪,如ptrace调试
停止:收到某些信号如SIGSTOP,SIGCONT可使进程重新激活
parent和children链表:维护进程继承关系,所有进程都为pid为1的init进程后代,进程必有父进程(父exit,父exit的时候会帮你找养父,否则你exit后就一直僵死状态了,还好init会经常wait)
struct list_head tasks: 维护双向循环链表
所以,遍历进程可parent/children式,也可链表式

内核栈一般8k,栈底thread_info(指向task_struct),当然也有的完全相反(栈指针由下向上)
假设8k至16k为内核栈,8k处为thread_info, thread_info至栈指针为空,栈指针到16k为栈空间,栈指针不断向thread_info靠近
current宏: 查找当前cpu上正在运行进程task_struct,实现
有的硬件体系寄存器很多:寄存器指向
不多:栈指针按8k取整(屏蔽后13位)找到thread_info再找到task_struct

进程在用户空间运行,使用用户栈,运行自己的代码,
进程在内核空间运行(系统调用,异常),使用内核栈,运行操作系统的代码,内核代表进程执行,仍处于进程上下文,current宏有效,返回用户空间可能发生用户抢占(被高优先级进程)
用户/内核空间是进程地址空间的两部分

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux进程

    当当当当~~,你是不是好奇什么是进程呢?这篇文章带你了解了解什么是进程,及其进程相关知识。 1. 什么是进程 从操作系统角度分析,进程是一个运行中程序描述 ——

    相关 Linux 进程

    目录 操作系统 进程 进程概念 进程的描述--PCB task\_ struct内容分类 进程的组织 查看进程 通过系统调用接口获取进程标志符(进程ID) 进

    相关 Linux 进程

    一 进程基本概念 1.1 进程和程序 进程(process):是一个可执行程序(program)的实例。更精确的定义是:进程是允许某个并发执行的程序在某个数据集合上

    相关 Linux进程

    一、什么是进程 Unix标准定义:一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。 进程由 程序代码、数据、打开文件描述符、栈空间、环境空间等组成。

    相关 linux 进程

    进程:运行中的程序(打开的文件,挂起的信号,内存,执行线程等等) 线程(pc,寄存器(线程需记录cpu寄存器的值,以挂起后恢复执行),栈),调度对象,在liux里是特殊进程

    相关 linux进程

    一、概念 Linux 是一种动态系统,能够适应不断变化的计算需求。linux 计算需求的表现是以进程的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是

    相关 linux-进程

    程序与进程 程序:通常为binary program,放置在存储媒体中,为实体文件的形态存在 进程:程序被触发后,执行者的权限和属性,程序的程序代码与所需