coursera 《现代操作系统》 -- 第十周 文件系统(2)
身份验证 Authentication
知道用户是谁。通过账号密码、Id 这样的识别出来。
访问控制 Permission
知道用户是谁后。

主动控制
记录用户ID和对应的访问权限 --> 记录可访问该文件的用户ID
文件没有记录的用户ID则不可以访问。
权限表
没有记录的文件名则用户不可以访问。
记录了文件名,但没有对应权限,也不能执行对应操作。
u 代表所有者(user)
g 代表所有者所在的组群(group)
o 代表其他人,但不是u和g (other)
a 代表全部的人,也就是包括u,g和o
r 表示文件可以被读(read)
w 表示文件可以被写(write)
x 表示文件可以被执行(如果它是程序的话)
其中:rwx也可以用数字来代替
r ------------4
w -----------2
x ------------1
- ------------0那么我们常见的以下的一些权限就很容易都明白了:
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
UNIX 的文件访问控制

文件系统的性能
瓶颈主要为磁盘,因为磁盘的速度远远落后于内存
分析问题的过程:
问题:减少磁盘请求时间
1. 访盘请求呢通常是由三个时间组成:寻道时间、 旋转延迟时间、 和数据传送的时间。
从软件层面考虑,我们能做的就是:减少寻道时间,减少旋转延迟时间
2.1 如何减少寻道时间
分析寻道时间:根据磁盘地址:台号+柱面号+盘面号+扇区号 找到对应的块。
由于要先获取 i 节点,再获取 i 节点对应的数据,所以 i 节点与对应的数据块的寻道时间越短越好。那么,放在i节点后面最好。
2.2 如何减少旋转延迟时间
分析旋转延迟时间:磁头要等到数据块经过时才能读取,所以我们设计好,数据块在磁道的排列

缓存的使用
1. 因为存在速度差异,如 CPU --> 内存 --> 磁盘。
2. 局部性原理
如何实现:
在速度更快介质的里面,建立一个下级介质的缓存。缓存大小比较小,所以需要替换策略。

从硬盘耗时入手
减少寻道时间

磁盘调度


通过调度磁盘访问序列,达到减少寻道时间、延迟时间的目的。(感觉计算的很多调度都属于数学问题,是否可以让数学方面的人设计,然后程序员实现?)
还要考虑请求等待的问题,要让请求在一定期限内完成。
练习1

理解题目中的名词
链接结构
索引结构、物理地址、块地址以及启动磁盘之间的关系
顺序结构
错题
有4个访问第66柱面的访盘请求,其访问要求如下:
| 请求号 | 柱面号 | 磁头号 | 扇区号 |
|---|---|---|---|
| ① | 66 | 1 | 4 |
| ② | 66 | 4 | 2 |
| ③ | 66 | 4 | 4 |
| ④ | 66 | 2 | 7 |
下列哪一种执行顺序可以获得最小的平均服务时间?
②、①、④、③
①、②、③、④
①、②、④、③
②、①、③、④
先弄懂磁盘结构
所有磁头是否是共同进退的?
主要看柱面号与扇区号
扇区是有顺序的,比如读了1扇区,读完后就在2扇区了,想要继续读1扇区,只能等待转完一圈。所以相同扇区的顺序应该隔开
设计文件系统时应尽量减少访问磁盘的次数,以提高文件系
统的性能。下列各种措施中,哪些可以减少磁盘服务时间?
当前目录
磁盘碎片整理
块高速缓存
磁盘的旋转调度
内存映射文件
假设磁头在65号柱面上操作时,有其他访问请求到达,其柱面(磁道)号为85、46、114、16和116。当系统完成65号柱面(磁道)的操作后,若采用最短寻找时间优先(SSTF)磁盘调度算法,为完成这些请求,磁头需要移动的柱面(磁道)数是
149
139
181
159
使用 Python 编写的 SSTF
# -*- coding: utf-8 -*-
from collections import OrderedDict __author__ = 'Simon' """使用 Python 实现 SSTF 磁盘调度算法
思路:
计算移动到各个磁道的距离
生成字典,形式为 `目标磁道: 当前磁道到目标磁道的距离`
以`当前磁道到目标磁道的距离`排序,生成一个 OrderedDict 将当前磁道移动到目标磁道,
从目标磁道列表中删除目标磁道,
移动距离加上`当前磁道到目标磁道的距离` 循环上述过程,直到目标磁道列表为空
""" track_list = [85, 46, 114, 16, 116]
current_track = 65 def find_shortest_track(current_track, a_list):
a_dict = {num: abs(num - current_track) for num in a_list}
ordered_dict = OrderedDict(sorted(a_dict.items(), key=lambda t: t[1]))
return ordered_dict def f(current_track, a_list):
ans = 0
ordered_dict = find_shortest_track(current_track, a_list)
while ordered_dict:
t = list(ordered_dict.items())
next_track, movement = t[0]
ans += movement
current_track = next_track
a_list.pop(a_list.index(current_track))
ordered_dict = find_shortest_track(current_track, a_list)
return ans print(f(current_track, track_list))
# >>> 149
coursera 《现代操作系统》 -- 第十周 文件系统(2)的更多相关文章
- coursera 《现代操作系统》 -- 第九周 文件系统(1)
文件的定义 文件名-> 路径名 磁盘结构 磁臂转还是那根柱子转? 盘片被轴带动旋转,磁头读取经过的扇区的数据. 典型的磁盘结构 一块盘呢由若干个盘片组成 每个盘片呢实际上有两个面啊,两个盘面 每 ...
- 20155326 第十周课下作业-IPC
20155326 第十周课下作业-IPC 学习题目: 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 学习过程 -IPC ...
- 20155237 2016-2017-2 《Java程序设计》第十周学习总结
20155237 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 计算机网络,是指分布在不同地理区域的计算机用通信线路互连起来的一个具有强大功能的网络系统.网 ...
- 第十周课下作业-IPC
第十周课下作业-IPC 题目:研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 共享内存 共享内存允许两个或多个进程进程共 ...
- 2017-2018-1 20155320第十周课下作业-IPC
2017-2018-1 20155320第十周课下作业-IPC 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 共享内存 ...
- 20155303 2016-2017-2 《Java程序设计》第十周学习总结
20155303 2016-2017-2 <Java程序设计>第十周学习总结 目录 学习内容总结 网络编程 数据库 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...
- 20155209 2016-2017-2 《Java程序设计》第十周学习总结
20155209 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 计算机网络,是指分布在不同地理区域的计算机用通信线路互连起来的一个具有强大功能的网络系统.网 ...
- 20155216 2016-2017-2 《Java程序设计》第十周学习总结
20155216 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 了解计算机网络基础 概念 计算机网络基础,是指将地理位置不同的具有独立功能的多台计算机及其外 ...
- 20155306 2016-2017-2 《Java程序设计》第十周学习总结
20155306 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 Java和Android开发学习(网络) 网络概览 计算机网络体系结构的通信协议划分为七层, ...
随机推荐
- taro + iview 实现跨平台开发(App,Wap,微信小程序)
1.安装 (1)安装脚手架 npm install -g @tarojs/cli taro init myApp (2)H5端运行 npm run dev:h5 taro build --type h ...
- lodash 检查值是否存在 includes
_.includes(collection, value, [fromIndex=0]) 检查 值 是否在 集合中,如果集合是字符串,那么检查 值 是否在字符串中. 其他情况用 SameValueZe ...
- 【Python】help与dir的用法
当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表.当没有为其提供参数时, 它返回当前模块中定义的名字的列表. 如果您需要快速获取任何的Python函数或语句的信息,那么您可以使用 ...
- ActiveMQ与MSMQ的异同
http://www.cnblogs.com/luluping/archive/2010/11/03/1867841.html 目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于 ...
- C# JSON序列化日期格式问题
默认序列化日期为1970至今的时间戳 需要在json.convert中做一些设置 //JavaScriptSerializer js = new JavaScriptSerializer(); Iso ...
- caffe 中如何打乱训练数据
第一: 可以选择在将数据转换成lmdb格式时进行打乱: 设置参数--shuffle=1:(表示打乱训练数据) 默认为0,表示忽略,不打乱. 打乱的目的有两个:防止出现过分有规律的数据,导致过拟合或者不 ...
- vue 父子组件属性传递
父子组件属性传递 注意:0.谁被引用,谁就算子组件 1.属性命名最好完全小写,否则需要如下格式转换:myAttr == my-attr 2.引入的vue组件后必须通过 components 注册才能 ...
- JQuery最佳实践及常见错误(转自 简书)
1 使用JQuery的ready处理器 如果你的代码操作DOM,则需要DOM加载完成后再运行代码.推荐使用如下的第一种写法,第二种写法在JQuery3.x中已经不推荐使用了. $(function ( ...
- Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
Atitit.编程语言and 自然语言的比较and 编程语言未来的发展 1. 单词的间隔靠空格,编程的单词的间隔靠分界符..1 2. 语句分界符:自然语言使用逗号,编程语言使用分号1 3. 换行1 4 ...
- Python内置函数之len()
len(s)用来判断对象的长度. 需要说明的是,整型,布尔等是没有长度这一说法的.字符串.字典.列表和元组都有长度. 例子: >>> len() Traceback (most re ...