操作系统(学习笔记)
进程=正在进行的程序=执行中的程序
进程 |
程序的本质:数据和对数据的处理; 进程的本质:正在运行(执行/动态)的程序; 进程是操作系统进行资源化分配和调度的基本单位; 进程是应用程序关于某些数据集合上的一次运行活动; 进程是程序的一次执行过程; 进程是动态的,程序是动态的,执行的程序才是进程,没有执行的程序不是进程; 动态的程序才是进程,静态的程序不是进程; 每个进程拥有独立的地址空间; 进程之间的地址空间是隔离的; 一个进程崩溃不会影响另一个进程;一个进程崩溃不会影响操作系统; 地址空间包括代码段、数据段、堆栈段; 代码段:存储程序的代码; 数据段:存储程序的全局变量和动态分配的内存; 堆栈段:存储函数运行时的局部变量;
|
多进程 |
CPU计算速度和IO速度严重不匹配;5.7*10^5:1 导致CPU利用率很低; 多道程序,交替执行,可以大大提高CPU利用率; 一个CPU上交替执行多个程序:并发(同时出发,交替执行); 核心是如何在不同任务间进行切换; 而切换的核心就是中断技术; 切出去的时候要记录当前程序的执行状态,切回来的时候再读出当时的状态,以便接续执行; 进程:进行(执行)中的程序; 运行的程序和静态程序不一样。 需要描述这些不一样,都记录在PCB中; PCB:process ctrl block(进程控制块),用来记录当前进程的当前状态; 在操作系统代码当中是一个结构体:struct task_struct{...} Ø 进程有开始有结束,程序没有; Ø 进程会走走停停,走停对程序没有意义; Ø 进程需要记录ax、bx,程序不用; 多进程:多个程序交替执行,分别成为进行中的程序; 如何实现多进程图像: 1. 通过映射表实现内存的分离; 2. 读写PCB,OS中最重要的结构,贯穿始终; 3. 要操作寄存器完成切换; 4. 要写调度程序; 5. 要有进程同步和合作; 6. 要有地址映射(防止相互干扰);
进程=资源+指令执行序列; 线程:保留了并发的优点,避免了进程切换代价; 将资源和指令切换分开; 一个资源+多个指令执行序列; 线程:只切换指令,而不切换资源; 指令的切换的核心是Yield; Create就是第一次切换时的样子; 用户级线程、内核级线程;
|
进程同步 |
同步:多个进程的推进合理有序; 进程之间的合作,合理有序的推荐,而不是任意向前推荐; 一个进程发出信号,另一个进程等到该信号,才能继续向下执行; 关键词:信号、合作、同步、等待、阻塞; 需要让进程走走停停,来保证多进程之间的合理有序; 分析走和停的实际,是多进程同步的关键; n 同步并不是同时,而是交替执行; n 交替执行不是随意的交替,而是合理的有序的交替; 程序可以有多个(多道),但是正在执行的程序只能有一个;
|
信号量 |
仅仅依靠一个counter信号,不足以支持进程的sleep和wakeup; 需要一个信息更加丰富的量,来记录信号; 通过信号量sem实现等待sleep与唤醒wakeup; sem小于0,表示有进程在等待资源,生产者处于睡眠状态,唤醒; 信号量:1965年,由荷兰学者Dijkstra提出的一种特殊整形变量,用来sleep和wakeup; semphore英 /ˈseməfɔː(r)/ 美 /ˈseməfɔːr/n. 信号标,信号量信号标信号对象 保护信号量: 竞争条件:race condition:和调度有关的共享数据语义错误; 错误由多个进程并发操作共享数据引起; 原子操作:一段代码只允许一个进程进入;
临界区:一次只允许一个进程进入的该进程的那一段代码; 找出临界区代码; 原子操作、互斥; 临界区代码保护原则: ①基本原则:互斥进入,如果一个进程在临界区中执行,其他进程不允许进入; 这些进程间的约束关系称为互斥 mutual exclusion;这保证了临界区; 好的临界区保护原则: ②有空让进:若干进程要求进入空闲临界区时,应尽快使一些进程进入临界区; ③有限等待:从进程发出进入请求到允许进入,不能无限等待; 解决竞争调价你的方法 值日算法(轮换算法)、买牛奶留标签算法(标签算法)、面包店算法(取号算法); 面包店算法的正确性: n 互斥进入:Pi在临界区内,Pk试图进入,一定有(num[i],i)<(num[k],k),Pk循环等待; n 有空进入:如果没有进程在临界区中,最小序号的进程一定能够进入; n 有限等待:离开进阶区的进程再次进入一定排在最后(FIFO),所以任一个想进入进程至多等待n个进程; 软硬件协同设计; 关闭中断法:关闭中断cli=close interrupt,执行完临界区代码再开中断sti=start interrupt; 关闭中断,对于多CPU不好使; 硬件原子指令法:给一段指令上锁,锁的本质就是一个变量(整形变量),将变量赋值为某一个值,就锁住,执行完再赋值为另一个值,就解锁了; 原子指令,一条指令是原子的,要么被执行,要么没有执行,不可分割; 临界区指令:不能被中途打断的指令, |
CPU调度 |
多个进程,应该选择哪个执行,这就是调度; 调度思想: ①按照先后顺序进行调度: 先来后到,谁先来,先执行谁; ②按照优先级进行调度: 任务短的可以适当优先; 调度目标:如何让进程满意,时间是关键,也就是快 n 尽快结束任务,周转时间短(从任务进入到任务结束) n 用户操作尽快反应:响应时间短(从操作发生到响应) n 系统内耗时间少:吞吐量(完成任务量) 如何做到合理?折中、综合考虑 n 吞吐量和响应时间之间有矛盾; n 响应时间小→切换次数多→系统内耗大→吞吐量小; n 前台任务和后台任务的关注点不同; n 前台任务关注相应时间,后台任务关注周转时间; n IO约束型任务和CPU约束型任务各有特点; n IO优先级更高一些,更利于并行; 折中和综合让系统变得复杂,然而系统又要尽量简单;
调度算法 FCFS=First Come,First Served,先来先服务;体现公平; SJF=short job first,短作业优先;周转时间最小; RR=round Robin按时间片轮转调度; 时间片大:响应时间太长;时间片小,吞吐量小;折中:时间片10-100ms切换时间0.1-1ms(1%); 定义前台任务和后台任务两队列,前台RR,后台SJF,没有前台任务时才调度后台任务; 后台任务优先级动态升高,防止饥饿;执行一段时间后,必须再调低,防止前台任务响应迟钝;
调度函数schedule()
|
fork |
fork英 /fɔːk/ 美 /fɔːrk/ n. 餐叉,叉子;耙,叉;岔路,支流;叉状部件,叉状物; v. (道路、河流等)分岔,岔开;(用餐叉)叉起;耙地,叉掘;走岔路中的一条;
fork进程控制函数,叉子函数、分叉函数;形象的表示进程之间的切换; 作用: 创建新进程;函数原型: pid_t fork(void);需要包含头文件 <unistd.h> 返回值:成功,两次返回(子进程返回 0,父进程返回子进程 ID);若出错,返回 -1 pid_t getpid(void);获取当前进程id;get process id pid_t getppid(void);获取当前进程的父进程id;get parent process id fork 的一个特性是父进程所有打开的文件描述符都被复制到子进程中。 父进程和子进程每个相同的打开描述符共享一个文件表项; 父进程和子进程共享同一个文件偏移量; 在 fork 之后处理文件描述符有以下两种常见的情况。 (1) 父进程等待子进程完成,在这种情况下,父进程无需对其描述符做任何处理。当子进程终止后,它曾进行过读、写操作的任一共享描述符的偏移量已做了相应更新。 (2) 父进程和子进程各自执行不同的程序段,在这种情况下,在 fork 之后,父进程和子进程各自关闭他们不需使用的文件描述符,这样就不会干扰对方使用的文件描述符。 ———————————————— fork 失败的两个主要原因是: (1) 系统中已经有太多的进程 (2) 该实际用户 ID 的进程总数超过了系统限制,CHILD_MAX 规定了每个实际用户 ID 在任一时刻可拥有的最大进程数。 fork 的用法 (1) 一个父进程希望复制自己,使父进程和子进程同时执行不同的代码段。 (2) 一个进程要执行不同的程序,在这种情况下,子进程从 fork 返回之后立即调用 exec 系列
|
操作系统
操作系统概述
|
BIOS是英文"Basic Input Output System"的缩略词,就是"基本输入输出系统"。 BIOS是个人电脑启动时加载的第一个软件。 操作系统是计算机硬件和应用之间的一层软件; 操作系统是管理硬件的软件; 方便我们使用硬件,如显存; 高效使用硬件,如开多个端口; 没有操作系统的计算机叫做裸机;因此操作系统相当于计算机的衣服;
CPU管理、内存管理、终端管理、磁盘管理、文件管理、网络管理、电源管理、多核管理; 操作系统
|
|||||||||||||||||
启动过程 |
1. 刚开机时CPU处于实模式 2. 开机时,CS=0xFFFF,IP=0x0000 3. 寻址0xFFFF0(ROMBIOS映射区) 4. 检查RAM、键盘、显示器、磁盘 5. 将磁盘0磁道0扇区读入0x7c00处 6. 设置cs=0x7c00,ip=0x0000
|
|||||||||||||||||
操作系统接口 |
POSIX:Portable Operating System Interface of Unix(IEEE制定的一个标准族) 接口表现为函数调用,又由系统系统,所以称为系统调用;
|
|||||||||||||||||
系统调用 |
主动进入内核的方法:中断指令int(interrupt)int 0x80 n int指令将使CS红的CPL改成0,以进入内核 n 这是用户程序发起的调用内核代码的唯一方式; 系统调用的核心 ① 用户程序红包含一段包含int指令的代码 ② 操作系统写中断处理,获取想要调用程序的编号; ③ 操作系统根据编号执行相应代码
将内核程序和用户程序隔离 区分内核态和用户态由于CS:IP是当前指令,所以用CS最低两位来表示:0是内核态,3是用户态; 内核态可以访问任何数据,用户态不能访问内核数据;对于指令跳转也一样,实现了隔离; n 获取特权级:访问的数据段DS的最低两位,CPL(CS)RPL(RS)DPL (privilege level) n 特权级判定:如果DPL>=CPL DPL>=RPL才能访问;
|
|||||||||||||||||
操作系统历史 |
①IBMSYS(1955-1965) 监控系统:实现任务批处理 ②OS/360:(1965-1980) 360表示全方位服务,开发周期5000人年 需要让一台计算机干多种事 多道程序multiprogramming 作业之间的切换和调度称为核心,既有IO任务又有计算任务,需要让计算机CPU忙碌 ③MULTICS多人使用(1965-1980) 每个人启动一个作业,作业之间快速切换 分时系统timesharing 代表:MIT MULTICS(MULTIplexed Information and Computer Service) 核心仍然是任务切换,但是资源复用思想对操作系统影响很大,虚拟内存就是一种复用; ④Unix(1980-1990) Unix是一个简化的MULTICS ⑤Linux(1990-2000) 多进程结构是计算机的基本图谱; ⑥DOS:CPM QDOS MSDOS Basic解释器 FAT管理磁盘 ⑦Windows 可视化 n 多进程图谱ProcessView(CPU、内存); n 文件操作视图FileView(IO、磁盘); |
特权级=PL=Privilege Level
描述符特权级(DPL,Descriptor Privilege Level)
|
实施特权级保护的第一步,是为所有可管理的对象赋予一个特权级,以决定谁能访问它们。每个 Descriptor 都具有描述符特权级(DPL,Descriptor Privilege Level)字段,Descriptor 总是指向它所“描述”的目标对象,代表着该对象,因此该字段(DPL)实际上是目标对象的特权级。
|
当前特权级(CPL,Current Privilege Level)
|
当处理器正在一个代码段中取指令和执行指令时,那个代码段的特权级叫做当前特权级(Current Privilege Level, CPL)。 正在执行的这个代码段,其选择子位于段寄存器CS中,其最低两位就是当前特权级的数值。 |
请求特权级(RPL,Request Privilege Level)
|
RPL也就是指请求者的特权级别(Requestor’s Privilege Level)。 |
特权指令(Privileged Instructions)
|
不同特权级别的程序,所担负的职责以及在系统中扮演的角色是不一样的。计算机系统的脆弱性在于一条指令就能改变它的整体运行状态,比如停机指令hlt 和对控制寄存器CRO的写操作,像这样的指令只能由最高特权级别的程序来做。因此,那些只有在当前特权级 CPL 为 0 时才能执行的指令,称为特权指令(Privileged Instructions)。 |
输出特权级(I/O Privilege Level)
|
在处理器的标志寄存器EFLAGS中,位13、位12是IOPL位,也就是输入/输出特权级(I/O Privilege Level),它代表着当前任务的I/O特权级别。某些指令,例如IN,OUT,CLI需要 I/O 特权,这些操作根据 IOPL 和 CPL 确定合法性。 |
内存分段的意义
- 在多任务环境下,系统中有多个程序在运行;
- 程序之间需要隔离!
- 分段是存储管理的一种方式,为保护提供基础;
- 不同程序在不同段中;
- 一个程序可以包含多个段;
- 段用于封闭具有共同属性的存储区域;
,,
标签:操作系统,特权,程序,笔记,学习,指令,进程,执行 From: https://www.cnblogs.com/zhangdezhang/p/16647459.html