首页 > 其他分享 >操作系统(学习笔记)

操作系统(学习笔记)

时间:2022-09-05 22:11:07浏览次数:72  
标签:操作系统 特权 程序 笔记 学习 指令 进程 执行

操作系统(学习笔记)

 

 

进程=正在进行的程序=执行中的程序

进程

程序的本质:数据和对数据的处理;

进程的本质:正在运行(执行/动态)的程序;

进程是操作系统进行资源化分配和调度的基本单位;

进程是应用程序关于某些数据集合上的一次运行活动;

进程是程序的一次执行过程;

进程是动态的,程序是动态的,执行的程序才是进程,没有执行的程序不是进程;

动态的程序才是进程,静态的程序不是进程;

每个进程拥有独立的地址空间;

进程之间的地址空间是隔离的;

一个进程崩溃不会影响另一个进程;一个进程崩溃不会影响操作系统;

地址空间包括代码段、数据段、堆栈段;

代码段:存储程序的代码;

数据段:存储程序的全局变量和动态分配的内存;

堆栈段:存储函数运行时的局部变量;

 

多进程

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制定的一个标准族)

接口表现为函数调用,又由系统系统,所以称为系统调用;

分类

POSIX定义

描述

任务管理

fork

创建一个进程

execl

运行一个可执行程序

pthread_create

创建一个线程

文件系统

open

打开一个文件或目录

EACCES

返回值,表示没有权限

mode_t st_mode

文件头结构:文件属性;

 

系统调用

主动进入内核的方法:中断指令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

相关文章

  • 220905-读书笔记-把时间当做朋友
    印象中,第一次读这本书的时候,是在大学期间,应该是大一或者大二的时候,当时候自己的智识达不到理解这本书的层次。现在在读这本书,竟觉得略有些浅显。总的来说,这本书写的比较零......
  • Tensorflow2.0-随笔笔记-基础
    创建张量tf.convert_to_tensor函数In[22]:tf.convert_to_tensor([1,2.])#从列表创建张量Out[22]:<tf.Tensor:id=86,shape=(2,),dtype=float32,numpy=array([1......
  • java基础学习:java中的反射
    一、什么是java反射什么是java的反射?说到反射,写这篇文章时,我突然想到了人的”反省“,反省是什么?吾一日三省吾身,一般就是反思自身,今天做了哪些对或错的事情。java的反......
  • 字符串入门学习笔记
    字符串哈希idea将字符串映射成一个数值(称为哈希值),因此可以在O(1)时间内做到例如判断两个串是否相等这样的事情,优化了时间复杂度注意,哈希值不同时字符串一定不同;哈希值相......
  • 蓝途随堂笔记
    java中的结构-顺序结构:从上往下依次执行的叫做顺序结构选择结构:分支结构,有相关的判断和选择if:-if~else-if~elseif~elseif...else-switch~case........*循......
  • 【图像处理笔记】图像分割基础知识
    形态学处理相同,图像分割操作的输入是图像,输出是从图像中提取出来的属性。本章的大多数分割算法都基于图像灰度值的两个基本性质之一:不连续性和相似性。第一类方法根据灰度......
  • python学习(元组、字典、set集合)
    (一)、列表 1、列表的嵌套 需求:输出数字9 解决:利用索引层级输出   2、列表的切片   (二)、元组:tuple1、列表与元组的区别?列表是可变的,元组是不可变的......
  • 虚拟机下卸载操作系统之CentOS7
    虚拟机下卸载操作系统之CentOS7https://www.jianshu.com/p/5f35d4a47854......
  • Docker学习总结
    Docker学习总结docker其实就是帮助我们在linux上安装各种软件的小帮手。我是这么认为的哈,他里面引入了两个概念,镜像和容器,镜像就是我们所要安装的软件,只不过是docker所需......
  • 2022-09-05 第四小组 王星苹 学习笔记
    学习心得简单的做一个java里面要连接网页和数据库实现注册,主要是代码,建议先写好工具类,这样之后写东西的时候直接就可以用了,比如新学的密码加密的盐的工具类,之前的JDBC工具......