linux内核与设计实现

版权声明:此文章版权归呆呆所有,转发请注明出处! https://blog.csdn.net/zhangyu4863/article/details/83186019

内核在/usr/src/linux/目录下

linux内核大部分为.h文件

  • 进程是资源分配的单位,线程是CPU调度的单位

  • 进程不能并行计算,cpu同一时刻只能运行一个进程

  • 进程包括多个线程

  • 线程可以并行,同一时刻可以运行多个线程

    • 这是现在的多线程技术,就是单个核心多个线程(大部分一个核心两个线程),原来的电脑是核心数和线程数相同的话就不是线程并行的了
  • 线程共享自身进程内的内存,但不是同时共享

  • 互斥锁,避免多个线程同时访问同一块内存

  • 信号量:进程的内存是有限的,同一时间内只能供给一定数量的进程使用。

    • 例如:有5个进程,主机内存大小为4个单位,每个近程使用内存大小为1个单位,那么有4个信号量(这里使用布尔值,true为正在使用,false为空闲),当四个进程正在使用内存,那么这4个信号量的状态都为true,那么当第5个进程要使用内存的时候查看信号量没有一个状态为false,那么第5个进程只能等待
  • 线程是进程的子集,协程是线程的子集

  • 四核心八线程

  • 四个真实的物理核心,从操作系统底层讲是8个核心,多出来的4个是虚拟的

  • 从物理上讲同时可以有4个进程同时运行,从操作系统底层讲最多有8个进程可以同时执行,多出来的4个是假的


进程管理

  • 内核通过唯一的进程标识符PID来标识每个进程,PID的默认最大值为32768(2的15次方)
  • 系统管理员可以通过修改/proc/sys/kernel/pid_mac来提高上限,但进程越多系统花在扫描进程上所浪费的时间越多
  • linux中每个进程都是PID为1的进程的后代;
  • 创建的子进程是父进程的fork();创建完成后,exec()函数负责读取和载入可执行文件并执行
  • 进程中的线程最大数
    • /proc/self/limits路径里面查看和更改进程中的线程最大数

进程调度

  • 非抢占式多任务和抢占式多任务
  • I/O消耗型和处理器消耗型
  • 时间片:分配给各个程序的运行时间。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。
    • linux为5ms-800ms
    • 1s=1000ms;1ms=1000 μ \mu s;1 μ \mu s=1000ns
    • 时间片设置时间过长会降低系统的交互性能,时间片设置时间过短会增大进程或线程切换带来的处理器耗时
  • I/O消耗型的时间片应当较大(例如:命令行交互),处理器消耗型的时间片应当较小
  • 上下文切换,从一个可执行进程切换到另一个可执行进程

系统调用

  • 应用程序–》c库–》内核

猜你喜欢

转载自blog.csdn.net/zhangyu4863/article/details/83186019