basics
OS基本定义: 管理软件与硬件资源,并提供一些软件接口,软件接口指的就是系统调用,当然不会直接利用,一般通过系统调用库过程实现,在Windows中通过win32 api实现,当然win32的api挺难区分到底是系统调用库过程还是系统调用。
系统调用的过程:存储原始context---->存储系统调用所要的信息(比如id)------->切换成内核态------->检查合法性-------->系统调用------->返回结果继续执行
系统在运行时有两种模式:内核态和用户态;用户态执行的指令只是所有指令的一个子集,防止其他进程损坏系统。至于内核态中包含什么,越来越模糊,有些系统会将文件系统也会塞入用户态中。
系统结构:
- 对于普通用户来说,分为shell/GUI
- 对于programmer来说,提供了win32 api/posix/java等系统调用
- 微内核、聚内核、MacOS(混合型)、VMware
posix的来源是unix按照各自独立的方向发展,因此IEEE规定了一个统一的POSIX接口。
进程or线程
进程的定义:a program in execution
进程是资源独立分配的单位,它包含program counter、stack、heap、register、data section、text section等等,注意它分配得到的物理空间是逻辑地址空间,都从0开始。
进程树、进程通信
存储器
存储器分为:
- register
- cache
- memory
- disk等
cache的原理是:当一个大资源可以分割成相对独立的更小部分,那么某些部分必然比其他部分更容易被访问到。注意这里由于访问介质不一样,普通的DS中关于时间复杂度和数量成正比并不成立,先在cache中查找没有再去memory中去查这些多余的查找并不多耗很多时间,而且平均下来必然更少的时间。
外存每bit价格差2个数量级,但速度可能差3个数量级
储存管理
OS创建一个地址的抽象来与实际的物理地址解耦,包括virtual memory的实现都是来自于这个实现。
文件系统
文件系统抽象用于隐藏I/O细节,实际上硬件设备是极其复杂的,统一的文件接口为programming提供了便利。
文件系统一般也组织成树形结构,与进程树区别的地方是他一般层数较大。
文件保护在unix系统中一般有9位,三位一组分别为自己、所在组用户、其他人,分别为RWE。
每个文件都有一个独立的i-编号,link命令实际上在调用这个编号复制一下,对应同一个物理文件
杂七杂八
trap指令切换当前状态
所有过程调用都是从右开始往左将参数塞入堆栈,典型的比如printf()
常用的unix命令
link 用于在不同文件下创建对应同一个物理文件的逻辑映射
mkdir rmdir 创建删除文件夹
cp 拷贝
mount、unmount 分别为装载、解装载文件系统
fork unix中唯一创建新进程的方式,可以配合execve使用,执行新的子进程
系统启动方式
读入rom加载主引导程序(512字节)(能找到主引导程序的原因是主引导程序在固定的地方),然后主引导程序加载(Ox7C00处)菜单,菜单选择加载内核。