Bwael's Blog


  • 首页

  • 分类

  • 归档

  • 关于

  • 搜索

python学习笔记03----运算符与表达式、序列

发表于 2016-03-22 | 分类于 学习笔记 |

运算符与表达式

1.在解释器总执行运算

在Python的解释器中,你可以交互地使用解释器来进行计算。
例如输入:
`

222+222
`

解释器会直接显示结果:
>>>444

2.运算符及用法

运算符 名称 说明 例子

与其他语言基本一致

3. 运算符的优先级(由低到高)

默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。

运算符 描述

  • lambda Lambda表达式
  • or 布尔“或”
  • and 布尔“与”
  • not x 布尔“非”
  • in,not in 成员测试
  • is,is not 同一性测试
  • <,<=,>,>=,!=,== 比较
  • | 按位或
  • ^ 按位异或
  • & 按位与
  • <<,>> 移位
  • +,- 加法与减法
  • *,/,% 乘法、除法与取余
  • +x,-x 正负号
  • ~x 按位翻转
  • ** 指数
  • x.attribute 属性参考
  • x[index] 下标
  • x[index:index] 寻址段
  • f(arguments…) 函数调用
  • (experession,…) 绑定或元组显示
  • [expression,…] 列表显示
  • {key:datum,…} 字典显示
  • ‘expression,…’ 字符串转换然而,如果你想要改变它们的计算顺序,你得使用圆括号。

例如:>>>3*(3+2)

输出结果为>>>15

1
2
3
4
5
6
#!/usr/bin/env python  

a=40
b=60
area=a*b
print("Area is",area)

序列

  • 在Python中最基本的数据结构是序列,序列中的每个元素被分配了一个序号——即元素的位置,叫做索引。第一个索引是0,第二个是1,而倒数第一个元素可以标记为-1,倒数第二个为-2以此类推。
  • 序列的元素可以是之前讲的所有基础数据类型,也可以是另一个序列,还可以是之后我们将要将的对象。
  • 序列最常用的有两类,元组(tuple)和列表(list)。两者的区别是,列表可以修改,而元组不行。
1
2
3
>>> student1=("霸天虎","男",19)      #student1就是元组  
>>> student1 #在解释器中输入变量名称,可以显示变量值
('霸天虎', '男', 19)
1
2
3
>>> student2=["汤姆猫","男",22]      #student2就是列表  
>>> student2
['汤姆猫', '男', 22]
1
2
3
>>> student3=("王尼玛","男","未知",["脑袋大","脖子短","屁股圆"])   #在序列中的元素也是序列  
>>> student3
('王尼玛', '男', '未知', ['脑袋大', '脖子短', '屁股圆'])

序列的操作

1.索引

1
2
3
4
5

>>> student1[0] #显示元组student1的第一个元素
'霸天虎'
>>> student1[-1] #显示元组student1的最后一个元素
19

1
2
3
4
>>> student3[-1][0]        #显示元组student3最后一个元组元素中的第一个元素  
'脑袋大'
>>> student3[-1][0][0] #显示元组student3最后一个元组元素中的第一个元素字符串中的第一个字符
'脑'

1.1分片

使用索引访问的是单个元素,而使用分片访问的是一坨元素
基本样式[下限:上限:步长],步长省略默认步长为1.

1
2
3
>>> numbers=[1,2,3,4,5,6,7,8,9]  
>>> numbers[0:3] #显示从第一个(包括第一个)到第三个(包括第三个)之间的元素,类似for(int i=0,i<3,i++)
[1, 2, 3]

1
2
3
4
5
6
>>> numbers[8:11]                      #显示第9个到第11个元素,因为没有第11个,所以只输出第9个元素  
[9]
>>> numbers[-3:-1] #显示末第三到末第一个元素
[7, 8]
>>> numbers[-1:-3] #如果顺序写反,不会输出元素
[]
1
2
3
4
5
6
>>> numbers[:3]                        #如果索引空缺,则默认索引两端  
[1, 2, 3]
>>> numbers[-3:]
[7, 8, 9]
>>> numbers[7:]
[8, 9]
1
2
>>> numbers[0:5:2]                     #显示第1个到第5个元素,且步长为2  
[1, 3, 5]
1
2
>>> numbers[::3]                       #步长3,从左向右输出  
[1, 4, 7]
1
2
>>> numbers[::-1]                      #步长为1,从右向左输出  
[9, 8, 7, 6, 5, 4, 3, 2, 1]

2.赋值

元组不可修改,而列表可以修改。

1
2
3
4
5
6
7
8
9
>>> student1[0]="擎天柱"                         #给元组student1第一个元素重新赋值,结果报错  
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
student1[0]="擎天柱"
TypeError: 'tuple' object does not support item assignment
>>> student2[0]="纸巾" #给列表student2第一个元素复制,没有问题
>>> student2
['纸巾', '男', 22]
3.序列相加与乘法

1
2
>>> ["王小明"]+["男"]                            #序列的加法  
['王小明', '男']
1
2
3
>>> a=["王大头","男"]*11                         #序列的乘法  
>>> a
['王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男', '王大头', '男']

4.序列的循环调用

1
2
3
student3=("王尼玛","男","未知",["脑袋大","脖子短","屁股圆"])  
for a in student3:
print(a)

输出

1
2
3
4
王尼玛  
男
未知
['脑袋大', '脖子短', '屁股圆']

词典

1.词典的定义

1
>>>dic = {'tom':11, 'sam':57,'lily':100}          #tom是键,11是值

词典和表类似的地方,是包含有多个元素,每个元素以逗号分隔。但词典的元素包含有两部分,键和值,常见的是以字符串来表示键,也可以使用数字或者真值来表示键(不可变的对象可以作为键)。值可以是任意对象。键和值两者一一对应。

与列表和元组不同的是,词典的元素没有顺序。你不能通过下标引用元素。词典是通过键来引用。

1
2
3
4
5
6
dic = {'tom':11, 'sam':57,'lily':100}  
print(dic['tom'])
dic['tom'] = 30
dic['王尼玛']=250 #可以通过这种形式向词典中添加元素

print(dic)

输出结果

1
2
11  
{'sam': 57, '王尼玛': 250, 'tom': 30, 'lily': 100}

2.词典的循环调用

1
2
3
dic = {'tom':11, 'sam':57,'lily':100}  
for key in dic:
print(key,dic[key])

输出

1
2
3
lily 100  
sam 57
tom 11

小提示:

  1. 在初始化序列时,单个元素的排列仍是排列,单个元素的元组不是元祖。
    python

    (“dd”)
    ‘dd’ #不是元组
    [“dd”]
    [‘dd’]

  2. 其实tuple、list是python中的两个”类”。至于什么是类,之后我会提到

  3. 小括号是元组,中括号是列表,大括号是词典

python学习笔记02----基本数据类型

发表于 2016-03-22 | 分类于 学习笔记 |

1.Python中的数

在Python中有4种类型的数——整数、长整数、浮点数和复数。
a) 2是一个整数的例子。
b) 长整数不过是大一些的整数。
c) 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
d) (-5+4j)和(2.3-4.6j)是复数的例子。

1
2
3
4
>>> a=1  
>>> b=3.53E-4
>>> b #在解释器中直接输入变量名可以输出变量中的值
0.000353

2.Python中的字符串

字符串是字符的序列。字符串基本上就是一组单词。

a) 可以使用单引号、双引号、三个引号来指示字符串。

1
2
3
4
5
"Hello World"  
'Hello World'
"""Hello World"""
#单引号双引号作用相同,都可以保存字符串中的空格
#三个引号除了空格以外,还可以保存换行

1
2
3
4
5
>>> name="王尼玛"  
>>> name[0] #通过序号0可以调用字符串第一个字符
'王'
>>> name[-1] #通过需要-1可以调用字符串末第一个字符
'玛'
1
2
>>> "王蜜桃"[-1]           #直接调用字符串末第一个字符  
'桃'
1
2
3
4
5
>>> a="hello"  
>>> b="world"
>>> c=a+b #字符串加法
>>> c
'helloworld'
1
2
3
a="python "*11             #字符串的乘法  
>>> a
'python python python python python python python python python python python '
1
2
3
>>> a="python"*11  
>>> "p" in a #判断p是否在a中
True

b) 转义符。 在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:
转义字符 描述
(在行尾时) 续行符
\ 反斜杠符号
\’ 单引号
\” 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000 空
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数yy代表的字符,例如:\o12代表换行
\xyy 十进制数yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出 有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如:

1
print(r'\t\r')

输出结果为

1
\t\r

c) Unicode字符串 Unicode是书写国际文本的标准方法。如果你想要用你的母语如北印度语或阿拉伯语写文本,那么你需要有一个支持Unicode的编辑器。类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U。例如,u”This is a Unicode string.”。

3.Python中的变量

Python中的变量不需要声明就可以使用。
比如可以输入

1
a="测试"

那么内存中就会有一个变量a,它的值是”测试”,变量的类型是字符串类型。
我们可以通过type()来查询变量的类型。

1
tpye(a)

输出结果为

1
<type 'str'>

可以再次给a赋其他类型的数值

1
a=1

小提示:
1.字符串是不可变的!一旦定义了字符串,这个字符串中的内容就不能更改啦!

2.Python中没有char类型!

3.多个字符串放在一起会自动连接!

1
2
print("你""好")  
输出结果是 你好

4.Python是大小写敏感的,标识符的明明要求与C语言相同。标识符的第一个字母必须是字母或者下划线”_”,其他位置的字母可以是字母、数字、下划线。

【OS学习笔记】进程同步与通信

发表于 2016-03-21 | 分类于 学习笔记 |

进程同步与通信

进程同步

并发进程的关系

  1. 间接制约关系:一组(两个或多个)进程共享一中资源,且该资源一次仅允许一个进程使用。
  2. 直接制约关系:几个进程相互协作完成一项任务,这些进程要求必须按照规定好的顺序依次执行。

    进程的互斥与同步

  • 1.进程同步:若干进程为为完成一个共同的任务而互相合作等待对方的消息的协调关系称为进程同步。
  • 2.进程互斥:进程之间争夺互斥资源引起的。
  • 2.1 饥饿:一个就绪进程所申请的资源总是被优先于自己的其他进程占有,而始终处于不能被调度执行的状态,这种情况称为饥饿。
  • 2.2 死锁:一个进程集合中,已经占有部分资源的两个或两个以上的进程,还需要获得已被其他进程占有的资源才能继续执行;有可能出现某些进程相互之间都在等待对方的资源且无法运行的局面,即在进程集合中的这些进程处于永远的阻塞状态,这就是死锁。
  • 3.二者相似之处
    进程互斥实质上是进程同步的一种特殊情况。
  • 4.进程同步与进程互斥的区别:~

临界资源与临界区

  • 一段时间内只能允许一个进程使用的资源(即互斥资源)称为临界资源。
  • 对临界资源的访问只能互斥进行,也即个进程对同一临界资源进行操作的程序段也应互斥执行,只有这样才能保证对临界资源的互斥访问。我们把进程中访问临界资源的代码段称为临界区。
    临界区同步机制的4条准则:
    1 .空闲让进。
    2 .忙则等待。
    3 .有限等待。若干进程要求进入同一临界资源的临界区时,应在有限的时间内使一进程进入临界区,即不应出现各进程相互等待而都无法进入临界区的情况。
    4 .让权等待。当进程不能进入其临界区时应立即释放所占有的CPU,以免陷入忙等(进程占用CPU的同时又一直等待)。

【OS学习笔记】处理器管理——单处理器调度算法 / 线程

发表于 2016-03-21 | 分类于 学习笔记 |

常用调度算法

一、先来先服务(FCFS)

二、短作业/短进程优先(SJF/SPF)

三、时间片轮转(RR)

时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

四、高响应比优先(HRRF)

高响应比优先调度算法的基本思想是把CPU分配给就绪队列中响应比最高的进程。
高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。
该算法中的响应比是指作业等待时间与运行比值,响应比公式定义如下:
响应比 =(等待时间+要求服务时间)/ 要求服务时间,即RR=(w+s)/s=1+w/s,因此响应比一定是大于1的。

五、优先级调度

既可用于高级调度,又可用于低级调度,还可用于实时系统。当该算法用于作业调度时,系统从后备作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行。当该算法用于进程调度时,将把处理机分配给就绪进程队列中优先级最高的进程。

优先级

1.静态优先级:静态优先级是在创建进程时确定进程的优先级,并且规定它在进程的整个运行期间保持不变。
2.动态优先级:动态优先级是在创建进程时赋予该进程一个初始优先级,然后其优先级随着进程的执行情况的变化而改变,以便获得更好的调度性能。

在采用优先级法的低级调度中,分为抢占式和非抢占式

  1. 非抢占式优先级算法
    在这种调度方式下,系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程就能一直执行下去,直至完成;或因等待某事件的发生使该进程不得不放弃处理机时,系统才能将处理机分配给另一个优先级高的就绪进程。
  2. 抢占式优先级算法
    在这种调度方式下,进程调度程序把处理机分配给当时优先级最高的就绪进程,使之执行。一旦出现了另一个优先级更高的就绪进程时,进程调度程序就停止正在执行的进程,将处理机分配给新出现的优先级最高的就绪进程。

六、多级反馈队列调度(MLFQ)

多级反馈队列调度算法为就绪状态的进程设置多个队列,第1级队列优先度最高,但时间片最小,以下各级队列优先度依次降低而时间片依次增加。各级队列均按先来先服务的原则排序。

  • 优点
    1、短进程优先处理。
    2、系统开销不大。
    3、对分时系统来说,交互型请求通常能在第一队列中完成。
  • 缺点
    如果优先级高的队列一直不为空,优先级较低的队列中的进程可能长时间无法得到运行,即会导致饥饿的发生。

七、实时调度

基本要求是保证计算机在规定的时间内对外部事件的请求做出响应。

实时调度和非实时调度的区别:

分类:

  • (1)比率单调调度算法
    算法的任务优先级按照任务周期来确定。短任务周期的任务具有较高的优先级,周期长的任务优先级较低。

    实现简单、系统开销小、灵活性好,实时调度基础算法,但CPU利用率低。

  • (2)最早截止时间优先调度算法
    算法的任务优先级按照截止时间来确定。截止时间接近的任务具有较高的优先级,截止时间较晚的任务优先级较低。

    更多用于抢占式调度算法

  • (3)最短空闲时间优先调度算法
    算法的任务优先级按最短空闲时间来确定。最短空闲时间越短的任务具有较高的优先级。

    任务空闲时间 = 任务截止时间 - 任务剩余时间 - 当前时间
    更多用于抢占式调度算法
    系统开销较大

线程

线程的引入

线程是为了弥补进程的缺陷而提出并使用的。

进程在一个时段内只能做一件事。

线程

线程可以理解为CPU调度和执行的最小单元。

  • 1 进程内的一个执行单元。
  • 2 进程内的一个可独立调度的实体。
  • 3 线程是进程中一个相对独立的控制流程序。
  • 4 线程是执行的上下文。

属性

  • 1.线程属于轻型实体,基本不拥有系统资源,只拥有为保证其运行必不可少的资源。

    例如,只有一个线程控制块(TCB)、程序计数器(PC)、一组寄存器和堆栈等。

  • 2.线程是独立调度和分派的基本单位,是能够独立运行的基本单位。
  • 3.同一个进程中的所有线程共享该进程的全部资源。
  • 4.线程并发执行程度高,同一进程的多个线程可以并发执行,多个进程的多个线程也可并发执行。

线程和传统进程的比较

相似之处

  • 1.二者都有标识符(ID)、一组寄存器、状态、优先级及所要遵循的调度策略。
  • 2.进程控制块(PCB),线程控制块(TCB)。
  • 3.进程中的线程共享该进程的资源,进程中的子进程也共享该进程的资源;线程和子线程的创建者可以对线程和子线程实施某些控制。

差异

  • 1.传统进程除了是调度和分派的基本单位以外,还是资源分配的基本单位。而引入线程的操作系统中,线程只是调度和分派的基本单位。
  • 2.线程并发执行的程度高于传统进程并发执行的程度。
  • 3.线程的创建和撤销时空开销小于进程,切换时间小于进程。
  • 4.
  • 5.一个线程的数据可以直接被属于同一个进程的其他线程所使用,因此数据传递既方便又快捷。

【OS学习笔记】操作系统引论

发表于 2016-03-21 | 分类于 学习笔记 |

OS的定义

OS是掌控(管理)计算机上所有事情的系统软件。

  • 控制和管理计算机系统的所有硬件和软件资源。
  • 合理地组织计算机的工作流程,保证计算机资源的公平竞争和使用。
  • 方便用户使用计算机。
  • 防止对计算机资源的非法侵占和使用。
  • 保证OS自身的正常运转。

OS的层次模型

用户接口
(命令接口、程序接口、图形用户接口)
对对象操纵和管理的软件集合
(处理机管理软件、存储器管理软件、设备管理软件、文件管理软件)
操作系统对象
(处理机、存储器、设备、文件和作业)

操作系统对象就是OS操作和管理的对象。
命令接口是用户和OS的接口,程序接口是应用程序和OS的接口。

OS的功能

一、存储管理

(1)、内存分配:为每道程序分配内存,两种方式如下:
静态分配:每个作业的内存空间是作业装入时确定的,装入后,不允许再申请新的内存空间,也不允许在内存中“移动”;
动态分配:每个作业的基本内存空间也是在装入时确定,但允许在运行中申请新的内存空间也允许“移动”
要完成内存空间分配应有:内存分配数据结构(记录内存使用情况)、内存分配功能(系统按内存分配算法分配)、内存回收功能(系统对用户不再需要的内存通过用户释放去完成系统的回收)
(2)、内存保护:确保每道程序都在自己的内存空间中运行互不干扰。即决不允许用户程序访问操作系统的程序和数据;也不允许转移到非共享的其它用户程序中去执行。因此需要内存保护机制,一种较为简单的内存保护机制是设置两个界限寄存器,分别用于存放正在执行程序的上届和下届。系统需对每条指令所访问的地址进行越界检查,如果发生越界,便发出越界中断请求,以停止该程序的执行。若完全用软件实现,需要增加若干指令去进行越界检查,将显著降低程序的运行速度,因此越界检查都是由硬件实现。当然对发生越界后的处理还须软件配合来完成。
(3)地址映射
一个应用程序(源程序).cpp经编译compile后,通常会形成若干个目标程序.obj;这些目标程序再经过连接link而形成可装入程序。这些程序地址都是从“0”开始,其他地址都是相对于起始地址计算的;由这些地址所形成的地址范围称为“地址空间”。其中的地址称为“逻辑地址”或“相对地址”。此外,由内存中的一系列单元所限定的地址范围称为“内存空间”其中的地址称为“物理地址”。
在多道程序环境中,地址空间中的逻辑地址和内存空间中的物理地址是不可能一致的,因此存储器管理必须提供地址映射功能,以将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址,该功能也由应硬件完成。
(4)内存扩充
由于物理内存容量有限,因此难于满足用户需要,势必影响系统的性能。这里的内存扩充是指借助虚拟存储技术,从逻辑上去扩充内存容量,使用户所感觉到的内存容量比实际内存容量大得多,可使更多用户程序能并发运行。需要内存扩充机制,实现如下功能:
请求调入功能:(现装现卖)允许在仅装入一部分用户程序和数据的情况下,启动该程序运行。在运行过程中对当发现继续运行所需的程序和数据尚未装入内存时,可向OS发送请求由OS将所需部分调入内存,以便继续运行。
置换功能:(舍不舍得)若内存中已无足够空间来装入需要调入的部分时,系统应能将内存中的一部分暂时不用的程序和数据调至磁盘上,然后将所需部分调入内存。

二、处理器管理

处理器的分配和运行都是以进程为基本单位
(1)进程控制
创建进程为其分配资源,运行结束时撤销进程并回收资源,及控制进程在运行过程中的状态转换。在OS中通常是利用若干条进程控制原语或系统调用,来实现进程控制。(要做就做全套)原语,指用以完成特定功能、具有“原子性”的一段程序。原子性,即程序中一组动作,不被其他任何操作打断。最基本的原语有创建新进程的进程原语,撤销进程原语。
(2)进程同步
对诸进程的运行进行协调,有如下两种协调方式:
进程互斥方式:指诸进程在对临界资源访问时,应采用互斥方式
进程同步方式:在互相合作完成共同任务的进程间,由同步机构对他们的次序加以协调。
最简单的实现进程互斥的机制是,为每种临界资源配一把锁,设置一对关锁原语Lock(w)和开锁原语Unlock(w)。而实现进程同步最常用的机制使信号量。
(3)进程通信
进程相互合作去完成一共同任务时,需交换信息。
直接通信方式:用与进程位于同一计算机系统时。由源进程利用发生命令直接将message挂到目标进程的消息队列上,以后由目标进程利用接收命令从其消息队列中取出消息。
间接通信方式(找个中间人,银弹策略):用于进程处于不同系统中时。由源进程利用发生命令将message送入一个存放消息的中间实体,以后由目标进程利用接收命令从中间实体中取走消息。该中间实体通常称为邮箱,相应的通信系统称为电子邮件系统???
(4)调度
等待在后边队列上的每个作业通常要经过调度,包括作业调度和进程调度两步才能执行。
作业调度的基本任务,是从后备队列中按照一定的算法,选择出若干个作业,为他们分配必要的资源(首要是内存)。将他们调入内存后,变为它们建立进程,使之称为可能获得处理器的就需进程;并将他们按一定算法插入就绪队列。
进程调度:从进程的就绪对垒中,按一定算法选一新进程,把处理机分配给它,并为它设置运行现场,使进程投入运行。
这两调度算法有些是相同的如FCFS(First come First service)算法,优先权高优先调度算法。

三、设备管理

(1)缓冲管理
管理好各种类型的缓冲区,如字符缓冲区和字符块缓冲区,以缓和CPU和I/O速度不匹配的矛盾,最终达到提高CPU和I/O设备利用率,进而提高系统吞吐量。(比如串口I/O)
最常见的缓冲区机制有单缓冲区机制,能实现双向同时传送数据的双缓冲机制,以及能供多个设备同时使用的公用缓冲池机制。
(2)设备分配
根据用户的I/O请求,位置分配其所需的设备。若在CPU和I/O间还存在设备控制器和I/O通道时,还须为分配出去的设备分配响应的控制器和通道。
为实现该功能,系统应配置设备控制表、控制器控制表等数据结构,用于记录设备及控制器的标识符和状态。对于独占设备(临界)的分配,还应考虑该设备被分配出去后,系统是否安全,设备用完后,还应立即回收。
(3)设备处理(设备驱动程序)
任务是实现CPU和设备控制器之间的通信。即由CPU向设备控制器发出I/O指令,要求它完成指定的I/O操作;并能接受由设备控制器发来的中断请求,给予及时的响应和相应的处理。
处理过程:
首先设备处理程序检查I/O请求的合法性、了解设备的状态是否空闲、了解有关传递参数以及设置设备的工作方式。
然后,便向设备控制器发出I/O命令,启动I/O设备区完成指定的I/O操作
最后是及时响应由控制器发来的中断请求,并根据该中断请求的类型,调用相应的中断处理程序进行处理。
(4)设备独立性和虚拟设备
设备独立性是指应用程序独立于物理设备,以使用户编址的程序与实际使用的物理设备无关。(就是说应用程序用的设备是OS提供的设备的接口,OS屏蔽了具体使用哪个设备?,银弹策略)可提高用户程序的可适应性,易于实现输入、输出的重定向(即I/O操作中所使用的设备科方便地重新指定)。
虚拟设备,是把每次仅允许一个进程使用的物理设备,改造为能同时供多个进程共享的设备。提高了设备利用率,加速了程序的运行。

四、文件管理

(1)文件存储空间的管理
系统设置相应的数据结构,用于记录文件存储空间的使用情况,以供分配存储空间时参考。
还应具有对存储空间进行分配和回收的功能。一般对存储空间的分配次啊用离散分配方式,以减少外存零头,并以盘块为基本分配单位。盘块的大小通常为512字节至4k字节。
(2)目录管理
方便在外存在寻找用户所需文件。通常有系统为每个文件建立一个目录项,包含文件名、文件属性、文件在磁盘上的物理位置等,最终构成一个目录文件。目录管理的主要任务,是为每个文件建立起目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取。
(3)文件的读写管理和存取控制
由于读和写操作不会同时进行,故可合用一个读/写指针。
一个完善的文件系统中,可以采用多级保护设施来达到保护文件存取控制的目标。第一进行系统级存取控制,使用空灵。第二级是用户级存取控制,通过对用户分类并为其分配适当的“文件存取权限”等方法实现。第三级文件级存取控制,通过设置文件属性(只读、只执行、读/写等属性)来控制对文件的存取。

五、用户接口

(1)命令接口
分为联机用户:由一组键盘操作命令及命令解释程序所组成。用户在终端或控制台上键入一命令后,系统理解转入命令解释程序。完成指定功能后,控制又返回终端或控制台。用户可通过此实现对作业控制。
脱机用户接口:为批处理作业的用户提供的,由一组作业控制语言JCL组成。批处理作业的用户不能直接与自己的作业交互作用,只能委托系统代替用户对作业进行控制和干预。
(2)程序接口
是为用户在执行中访问系统资源而设置的,是用户程序取得OS服务的唯一途径,由一组系统调用完成。
(3)图形接口
将联机用户接口演化而来,得到图形接口,更方便直观。

六、网络与通信管理

(1)网络资源管理
计算机联网的目的是进行资源共享,网络操作系统应能够实现网上资源共享,管理用户对资源的访问,保证网络信息资源的安全性和完整性。
(2)数据通信管理
计算机联网后站点之间可以互相传送数据。数据通信管理为为网络应用提供必要的网络通信协议,处理网络信息传输过程中的物理细节;通过通信软件,按照网络通信协议完成网络上计算机之间的信息传输。
(3)网络管理
包括网络性能管理、安全管理、故障管理、配置管理和日志管理。

OS的基本特征

一、并发性

并发性是操作系统最重要的特征,其他特征以并发性为前提。并发性是指两个或两个以上的事情或活动在同一时间间隔内发生(不是同一时刻)。即,在计算机系统中同时存在多个进程,从宏观上看,这些进程是同时运行并向前推进着;从微观上讲,任何时刻只能有一个进程执行,单CPU条件下,则这些进程在CPU上交替执行。
通常的程序是静态实体(Passive Entity),它们是不能并发执行得。为了让程序并发执行,系统必须分别为每个程序建立进程(进程的来由),即在系统中能独立运行并作为资源分配的基本单位,他是一个活动实体。

二、共享性

在内存中并发执行的多个进程可以共同使用系统中的资源。
互斥共享方式:有些资源如打印机,虽然可同时供多个进程使用,但一段时间内却只允许一个进程访问该资源(称为临界资源),所以需要同步的方式进行访问使用。临界资源都要求互斥地被共享。
同时访问方式:允许在一段时间内由多个进程同时对它进行访问,这里的“同时”往往是宏观上的,微观上这些进程也可能是交替地对该资源进行访问。这种方式的典型资源是磁盘。

三、虚拟性(Virtual)

虚拟性 的本质含义是指一个物理实体映射为多个逻辑实体。
例如,多道分时系统中,虽只有一个CPU,但每个终端用户却都认为是有一个CPU在专门为他服务。也可把一条物理信道虚拟为多条逻辑信道(虚信道)。在os中虚拟的实现,主要是通过分时使用的方法。如果n是某一物理设备所对应的虚拟的逻辑设备,则虚拟设备的速度必然是物理设备速度的1/n.

四、不确定性

进程的执行由于资源等因素的限制并非“一气呵成”,而是走走停停,因此是以一部方式运行的。尽管如此,只要运行环境相同/初始数据相同,作业经多次运行,都会获得完全相同的结果,因此,异步运行是允许的。

OS的分类

无OS时的计算机系统:人工操作方式-à脱机输入输出方式

一、批处理系统(成批处理特性)

单道批处理系统:
多道批处理系统:用户所提交的作业都先存放在外存上并排成一个队列称为“后备队列”;然后由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使他们共享CPU和系统中的各种资源,从而内存中驻留多道程序并行执行。(作业从提交到完成,需要进过两次调度:作业调度算法从外存的队列中选入内存。进程调度算法,从内存中作业中选择其一将处理器分配给其进行执行)
优点:
1.、提高CPU利用率。I/O是在准备数据,所以在I/O完成前CPU是无法完成操作的。这样显然会降低CPU的利用率。所以多道程序,可以让多个程序装入内存,可交替执行,从而当正在运行的程序因I/O而暂停执行时,系统可调度另一道程序运行,从而保持了CPU处于忙碌状态。
2、可提高内存和I/O设备的利用率,如果单道程序,则偌大的内存只能装入一个程序,这样必定浪费内存。
3、增加系统吞吐量。
缺点:
1(指作业进入系统到执行完成退出系统的时间)平均周转时间长,。由于作业要排队,依次进行处理,因而作业的周转时间较长。
2无交互能力,用户一旦提交作业,就不能再与自己的作业进行交互,修改和调试不方便。

二、分时系统(比如windows)(交互特性)

指在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户共享主机中的资源,每个用户都可通过自己的终端以交互(人机交互)的方式使用计算机。
实现的关键问题:及时接收(能同时接收多个终端上输入的数据,为每个终端配置一个缓冲区,用来暂存用户键入的命令),及时处理(各个用户的作业都必须在内存中,且能频繁获得处理机而运行,此目标要求所有的用户作业都直接进入内存)
实现方法:
(1)用户作业不能先进入磁盘,然后再调入内存。
(2)不允许一个作业长时间占用处理器直至它运行结束或发生I/O请求后,方才调度其他作业运行。应规定每个程序只运行很短的时间(通常称为时间片),然后暂停该作业的运行并立即调度下一个程序的运行。

三、实时系统(比如DSP中RTOS)(实时特性)

所谓实时是指“及时”“即时”,实时系统是指在规定时间内完成对该事件的处理,并控制所有实时任务加以分类。
实时系统是以任务来划分,并由他们反映或控制外部时间,因而带有紧迫性。
划分:
执行任务是否呈现周期性:周期性实时任务(周期性的控制某个外部时间)、非周期性实时任务。
对截止时间的要求来划分:硬实时任务(必须满足任务对截止时间的要求,否则可能出现难以预测的结果)
软实时任务(也有个截止时间,但并不严格,错过不会有太大影响)
注意:实时系统也与分时系统一样具有多路性、独立性,可为多个终端服务且独立,但对实时系统而言,其多路性表现在经常对多路的现场信息进行采集或对多个对象或多个执行机构进行控制。
实时系统也具交互性,但仅限于访问系统中某些特定的专用服务出现,而不想分时系统那样提供数据处理服务、资源共享等服务。

批处理系统、分时系统和实时系统是三种基本的操作系统类型。一个实际的os可能兼有三者或其中两者的功能。

四、微机操作系统 ~~~

五、网络操作系统

六、多CPU操作系统

七、分布式操作系统

八、嵌入式操作系统

1…78910
bwael

bwael

学习总结 思考感悟 知识管理

46 日志
3 分类
27 标签
RSS
github coding twitter zhihu
Creative Commons
Links
  • Main Site
  • Tonglele
© 2020 bwael
Hosted by GitHub & Coding Pages