操作系统学习(二)-- 操作系统之进程与线程

本文深入探讨了操作系统中进程与线程的概念,包括进程的基本特性、进程的状态转换、进程间的地址空间隔离,以及用户级线程和核心级线程的区别。此外还介绍了线程切换的实现方法,并对比了并发与并行的不同。

操作系统之进程与线程

L8 CPU管理的直观观点

  • 管理CPPU,设定PC初值,然后按顺序从内存中取值执行
  • fprintfIO指令,执行时间比没有IO指令的慢很多,执行IO的时候CPU等着,利用率比较低。
  • 一个CPU上交替的执行多个程序:并发,PC的切换!
  • 每一个程序有一个存放信息的结构体:PCB,切换PC时的信息(位置,变量信息等)。
    KODIyqp.png

  • 进程概念--运行中的程序 和静态程序不同。
  • 进程有开始和结束,会走走停停,需要记录变量等,程序都没有这些特点。

L9 多进程图像

  • pid进程号,多进程图像

mUS9cqQ.png

  • 多进程图像从启动开始到关机结束都存在。
    T9QfUkU.png

  • 1.多进程如何组织? ----PCB+状态+队列
  • Process Control Block(PCB):用来记录进程信息的数据结构
  • 就绪队列,等待队列...
  • 进程状态图
    9N4IccA.png

  • 2.多进程如何交替?
  • schedulegetNext()选择就绪队列中的PCB,就是任务调度,后续学习。
  • 进程调度:FIFO(没有考虑进程执行的任务区别),Priority(进程优先级怎么设定,有些进程饥饿)
    UinHjCx.png
  • 交替的三个部分:队列操作,+调度+切换
    VqeqISh.png

  • 多进程如何影响?
  • 多个进程同时在内存中,会有相互影响,进程一可能访问进程二的内存,这样可能改变了数据
  • 多进程地址分离:映射表(每个进程有自己的映射表)
    IyBveFV.png

  • 多进程如何合作?
  • 共享数据,有可能访问冲突。
  • 实际:生产者-消费者实例

  • 有问题出现,进程同步(合理的推进顺序)
  • 上锁实现
  • 总结
    cTHidxc.png

L10 用户级线程

  • 指令切换,但是映射表不切换(内存)
  • 交替执行才是并发
    uwp2t7N.png

  • 实现线程的切换
    ENjAumz.png
  • 核心是yeild函数
    ian1L8r.png

  • TCB线程控制块和栈相互配合
    taMMvj1.png
  • 两个线程一个栈,就会乱
  • 线程切换,首先将栈切换回去
  • TCB全局的数据结构
  • esp实际就是寄存器,TCB的元素
    QjOSnSw.png

  • 两个TCB,两个栈,切换的PC在栈中
    diYgB9H.png
  • 用户级线程也可以实现线程的切换,都用用户控制
  • 核心级线程
  • 当核心级线程切换时,用户级线程内核不可见,看不到用户级线程,所以用户级线程都不会执行
    xNyKAlE.png

  • 核心级线程并发性更好
    7CYy03T.png

L11 内核级线程

  • Kernel Threads
  • 切换指令流+切换资源(映射表)--->切换进程;进程都在内核进行
  • MMC实际就是内存映射表,多核公有MMC;实际就是多线程
  • 多核处理需要核心级线程才能发挥价值
  • 每个线程分配一个CPU核
  • 区别并发(两个程序交替执行)和并行(多线程在多核上同时处理)
    nzwYl4B.png

  • 两套栈是核心级线程的关键(内核栈和用户栈)
  • 只有中断(调用硬件)才能进入内核栈
  • 一套栈的样子!
    rG9QfEJ.png
  • 内核线程switch_to的五段论
    4J7avrp.png

L12 核心级线程实现实例

  • 核心级线程的两套栈,核心是内核栈
    X88RORD.png
  • 不仅栈要切换,PC也要切换
  • 内核线程switch_to的五段论
    4J7avrp.png
  • 切换五段论也就核心的几句话INT,sys_fork->schedule->switch_to,ret_from_sys_call
  • TSS ? 初始化
    y5jGVAB.png
  • copy_process的细节,get_free_page的到空闲页内存,mem_map每页的大小4k,malloc是用户态内存申请
  • 创建的进程,在内核栈中分开的,在用户栈中共用栈
    767kYF0.png
  • eax=0进行子进程,exa!=0进行父进程
    rJghClD.png

L13 操作系统的结构

  • Linux Kernel Source Tree
  • 研究和实践复杂系统的能力
  • CPU取址执行
  • 用户态和内核态的切换
  • fork()就是系统调用,int 0x80
  • 先创建两个子进程,形成就绪队列;然后父进程阻塞,调用schdule,运行子进程,完成后调度schedule -- swtich to next下一个就绪队列的子进程。切换就是改变PC地址,时钟中断进行A,B切换
  • fWN7D4V.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值