宋宝华:Linux的任督二脉——进程调度和内存管理_linux阅码场的技术博客_51CTO博客
参考上述文章,回答文章中提到的问题(问题是学习的关键,如下仅为当前的认识,如有问题欢迎指正~)
1.Linux进程和线程如何创建、退出?进程退出的时候,自己没有释放的资源(如内存没有free)会怎样?
答:什么是进程?资源管理的单位,包含业务占用的设备的所有资源的集合,比如内存、文件、工作目录、进程号等等;
什么是线程?是linux内核的最小调度单元;内核中抽象为task_struct,这里的线程可以叫做一个进程吗?笔者觉得是可以的,因为这个线程也包含进程该有的所有资源的集合,不太一样的是有可能多个线程共享同一块资源。下文把进程和线程都当做一个task_struct来解释。
进程创建?不管是内核线程还是用户线程都通过do_fork来创建;
进程退出?不管是内核线程还是用户线程都通过do_exit来退出;
如果没有释放资源,用户态的线程退出时会通过do_exit来回收没有人使用的vma;如果内核线程呢??需要进行代码分析。。还是说判断没有人使用这块内存就一并回收了?
2.什么是写时拷贝?
当新的进程创建的时候,会暂时使用父进程的vma地址空间,并将其设置为只读权限,当任意一方有写得行为时再创建新的物理页;写时拷贝依赖MMU;
3.Linux的线程如何实现,与进程的本质区别是什么?
线程就是一个task_struct,是linux的最小调度单元;进程是资源的集合;
4.Linux能否满足硬实时的需求?
linux由于中断、软中断、自旋锁的上下文走出临界区的运行时间不确定,导致没法在本地cpu进行线程切换,也就无法保证线程被调度的时间在固定的范围内;
当前也有相关的RT补丁来优化这个问题,尽量缩小上述临界区的运行时间;
5.进程如何睡眠等资源,此后又如何被唤醒?
进程睡眠等资源可以有两种方式,可被信号打断和不可被信号打断两种睡眠方式;
要么被信号中断导致被唤醒,要么等到资源被唤醒;
6.进程的调度延时是多少?
进行的调度延时是指??进程得到调度的时间-进程被wakeup的时间
为什么有调度延时?? 线程切换延迟?
7.调度器追求的吞吐率和响应延迟之间是什么关系?CPU消耗型和I/O消耗型进程的诉求?
吞吐:是指cpu单位时间执行cpu指令的个数
响应延迟:是指进程被唤醒到得到运行的时间差;
吞吐和响应延迟是一种对立的关系,高吞吐,延迟也比较高,这种操作系统更偏向于干活;
CPU消耗型就是干活类型的进程,需要长时间占据cpu进行运算
I/O消耗型就是交互型的进程,需要快速得到调度就行,其余时间不会长时间占据cpu
8.Linux怎么区分进程优先级?实时的调度策略和普通调度策略有什么区别?
进程优先级?分为静态优先级和动态优先级;
实时调度:高优先级一直占据cpu不会被低优先级抢占;实时调度策略又分为两种,FIFO和普通实时进程,这两种调度策略是针对相同优先级的进程如何分配cpu做的区分,一个是先入先出,另一个是均等分配时间
普通调度:针对优先级来分配运行时间,不同优先级的进程间会发生抢占;
9.nice值的作用是什么?nice值低有什么优势?
nice值用来动态修改进程的优先级,nice值越低,表明进程的优先级越高,分配的时间片越大;
10.Linux可以被改造成硬实时吗?有什么方案?
RT补丁
11.多核、多线程的情况下,Linux如何实现进程的负载均衡?
负载均衡???哪个cpu运行队列多,就向相邻的域中释放一个进程
12.这么多线程,究竟哪个线程在哪个CPU核上跑?有没有办法把某个线程固定到某个CPU跑?
cpu亲核
13.多核下如何实现中断、软中断的负载均衡?
中断和软中断来绑核
14.如何利用cgroup对进行进程分组,并调控各个group的CPU资源?
cgroup提供了debug文件系统来调试,cgroup对内存、cpu等资源进行分组管理,后续继续搞代码再分析吧。
15.CPU利用率和CPU负载之间的关系?CPU负载高一定用户体验差吗?
利用率就是cpu单位时间工作执行cpu指令的次数
cpu负载就是cpu要执行的进程个数??
cpu负载高用户体验不一定差,主要是io消耗型进程相应延迟有多大;