SLP(Chapter 14)::异常和进程/线程

0 控制流

什么是控制流?

指令流。
控制转移:PC改变值

正常流:

  • 平滑序列smooth sequence:PC++
  • 程序指令jump、call、ret改变平滑序列

异常流Exception:突然控制传输,以响应系统状态的变化
在这里插入图片描述

1 异常

异常的层次:

  • 硬件层:定时器中断(PIT)
  • OS层:上下文切换
  • 应用程序层:setjmp(),longjump()

异常:由时间引起,异常处理/中断服务程序处理(ISP)
- 怎样定位到对于的异常处理程序/ISP?
- Exception number [Page fault 14]
- Exception table [initialized at boot time]
- RTR:异常表基地址寄存器

在这里插入图片描述
在这里插入图片描述

异常分类:

  • 异步异常
    1. 中断 interrupt(返回到下一条指令)
  • 同步异常
    由执行指令引起的事件引起
    1. 陷阱 trap(返回到下一条指令)
      E.g. system calls, breakpoint traps
    2. 错误 fault(可能返回到当前指令
      E.g. page faults, protection faults, floating point exceptions
    3. 中止 Abort 不return
      E.g. illegal instruction, ECC memory check

在这里插入图片描述

异常 V.S. 函数调用

  • 返回地址
    可能不是下一个指令
  • 内核堆栈 V.S. 用户堆栈
  • 在内核模式下运行
  • 将更多推送到堆栈上
    EFLAGS(程序状态和控制)
  • 发生时间
  • 关联的函数
  • 软件还是硬件

IA32/x86 中的异常

在这里插入图片描述

2 进程和线程

进程 process

异常允许操作系统提供进程
why?OS可以通过异常处理拿回对CPU控制权
- 时间片超时
- I/O完成
- 系统调用

进程:程序的一个实例(它与程序是什么关系?)

  • 资源所有权(空间)
    专用地址空间
    虚拟内存
    主内存的独占使用
  • 调度/执行(时间):绝对下一个运行的进程
    逻辑控制流
    上下文切换
    CPU 的独占使用

进程组成的?

  • 数据
  • 代码
  • 上下文/PCB

交错(物理)和并发(逻辑) Interleaving and concurrency :看似并发,实际上是交错的

多任务multitasking的类型

  • Cooperative multitasking 协作式多任务
  • Preemptive multitasking 抢占式多任务

CPU mode:

  • CPU mode = 1,用户态,不能执行特权指令
  • CPU mode = 0,系统态,可以特权指令

异常出现,就切换:

  • 模式切换 mode switch
  • 上下文切换 context switch

进程相关的WIN32 API

  1. 创建进程及其主线程:CreateProcess()
    暗含系统调用NtCreateProcessEx(), NtCreateThread()
  2. 终止当前进程:ExitProcess()
  3. 终止另外的进程:TerminateProcess()
    暗含系统调用NtTerminateProcess()

线程 thread

Why 线程?
更多的控制/跟踪流程(Remote Procedure Call,RPC)

多线程:在单个进程中支持多个执行线程

用户态线程(ULT) VS 内核态线程(KLT)
在这里插入图片描述

3 Windows的进程和线程

WHY 学windows API?

  • 在利用 Windows 功能时为您提供最佳性能、最大功能和最大多功能性。
  • 可执行文件相对较小,不需要外部库运行。
  • 熟悉 API 可以更深入地了解 Windows 内部
    在这里插入图片描述

注意
头文件: WINDOWS.H
程序入口 WinMain
#define WINAPI __stdcall //function call protocol
hInstance instance handler 实例句柄
szCmdLine parameters
iCmdShow initialized window size

hello world 1:简单版本

在这里插入图片描述
在这里插入图片描述

hello world 2:完整版本

要点

  • Windows 向程序发送消息
  • 如何结合窗口、窗口类、窗口过程、消息队列、消息循环和窗口消息到实际程序的上下文中
  • 没有人真正记住所有的语法来编写这个开销
    通过复制现有程序并进行适当的更改来开始新程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章