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:异常表基地址寄存器
异常分类:
- 异步异常
- 中断 interrupt(返回到下一条指令)
- 同步异常
由执行指令引起的事件引起- 陷阱 trap(返回到下一条指令)
E.g. system calls, breakpoint traps - 错误 fault(可能返回到当前指令)
E.g. page faults, protection faults, floating point exceptions - 中止 Abort 不return
E.g. illegal instruction, ECC memory check
- 陷阱 trap(返回到下一条指令)
异常 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
- 创建进程及其主线程:CreateProcess()
暗含系统调用NtCreateProcessEx(), NtCreateThread() - 终止当前进程:ExitProcess()
- 终止另外的进程: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 向程序发送消息
- 如何结合窗口、窗口类、窗口过程、消息队列、消息循环和窗口消息到实际程序的上下文中
- 没有人真正记住所有的语法来编写这个开销
通过复制现有程序并进行适当的更改来开始新程序