操作系统学习笔记

 

对文件系统原理学习的理解

 

按需分配。打开的文件属性才放入内存中。
关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小

文件名,磁盘块地址,多个。
连续分配:一个文件占据了3个磁盘块。是连续在一起的。
读的性能很好,读一个文件的内容只要一次操作,找到第一个磁盘块,后面的磁盘块就知道了。不用继续旋转。
缺点是,磁盘碎片多。要想避免碎片,要多进行碎片整理(不显示,太耗费性能)。所以这种方式不适合变化大小的文件。适合固定大小。比如CD文件。
链表分配:解决磁盘碎片。文件占用三个磁盘块,这三个磁盘块可以在任意位置,很方便扩充文件的容量。比如文件增加内容,要加一个磁盘块,随便去哪里拖一个磁盘块挂上去。有一个指针指向磁盘块地址。
缺点是,随机读写耗费性能。比如要读一个文件的第6个磁盘块的内容,必须从找到文件的第一个磁盘块然后顺着顺序第二,第三.....第五全部读到,才能知道第六个磁盘块在哪里。
为了提高速度。把文件的链表放到内存中。
在内存中存储链表。
多少个文件。就要多少个链表项吗?
为了解决占用内存过多问题(磁盘容量比内存大多了。

疑问,这个链表项是如何设计的呢。
链表这种数据结构要看看。。
文件名,目录是特殊的文件。
目录下有子目录如何实现的。文件最终在目录下

 

 

 

 

 

文件系统几种实现方式

文件系统要解决的本质问题是,一个文件在磁盘上如何组其内容。
然后记录这个文件分布在哪几个磁盘块上,这样当读取文件内容的时候知道去磁盘哪里找。

1、连续分配法

一个文件的内容存储在连续的磁盘块上。

这样实现很简单:记录文件第一块磁盘块位置,然后记录一个往后推的数字号。做简单的加法即可找到内容。

缺点:造成磁盘碎片。发生在删除文件的时候,这个文件占据的磁盘块就是空闲状态。
刚开始不会有这问题,因为磁盘有足够的空间可用。不用管这些空闲块。但是后面磁盘空间不够用的时候呢,还是要来使用它们。

如何让新加的文件使用这些空闲块呢?

你存入数据之前必先先知道这个文件大小,文件大小要是固定的。比如5k。不是固定的话,文件内容增长,超过5k后呢?
这样计算大小的方式实际好不好?
假设你打开一个wps进行编辑,必须要先问用户,你的文件打算多大空间。这样才能去选择合适的磁盘块存储这个文件。
用户怎么知道?

2、链表分配法

磁盘块形成一个链表。串起来。相信我们生活中用的链子,是不是一个节点一个一起串起来的。
磁盘块看成是节点。
每个磁盘块第一个字节,存一个指针,这个指针就是指向下一个磁盘块。
想象一下房间号。
找出一批量房间给这些运动员的居住的。

现在明白了,内存中的文件分配表。
实际上就是为每个文件做一个条目。这个条目里面记着磁盘块的指针,指针是从开始到结束,按照顺序来的。

 

 

 

 

 

 

 

 

为什么window要进行分区而linux系统不用分区?

现在明白其中原理了。

window 之所以要进行分区。就是因为,它需要区分不同的文件系统。当你请求一个文件时,给出路径,操作系统就能知道向哪个文件系统去请求,就是因为分区。一个分区只能有一个文件系统。window通过盘符(c,d,e,f等字母)来确定文件系统。

Linux不需要分区。因为它做了一个抽象层。来管理所有文件系统。
操作系统针对这个抽象层来获取数据。使用挂载的方式。a 和b两个磁盘可以挂载到同一个目录下去。读取文件的时候,关心的是所有文件系统的抽象层操作,可以理解成接口。

 

 

分段和分页技术

至今都没搞明白,段和页的区别。
页是操作系统的看法,它将内存划分成一块一块。
有什么用呢?

搞清楚操作系统为什么要这样子做。
难道是为了解决内存不够的问题吗?

分段技术早于分页技术。
最先有分段,它的特点是,程序需要多少内存空间,就以多少空间为整体换入磁盘,在磁盘和内存之间移动。
这里的段很形象解释了,程序运行在哪个内存区间,这就是段。分段,以段为单位来分配内存?

这样效率并不高。提出一个分页思想,通俗就是等份大小的内存。明显的问题我还没看到。

操作系统为每个进程分配时间片

 

 

为什么操作系统要设计成抢占资源的方式呢?这一让每个任务都能得到处理 如果一个任务将要耗费很长时间那么,它就会占着cpu,结果导致其他任务无法处理。

现实中有这样的思想和案例。

上下文切换,是不是指的就是这种调度呢?

上下文切换:保持当前进程状态(应该是放到磁盘上去?),然后把另外一个进程调入进去供cpu执行。

时间: 2024-07-30 23:59:40

操作系统学习笔记的相关文章

JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)_javascript技巧

//取得用户代理字符串 并全部小写. var ua = navigator.userAgent.toLowerCase(); document.write(ua); 在上篇文章给大家介绍了基于javascript代码检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 ,感兴趣的朋友可以点击全文了解详情. 1.识别呈现引擎 引擎主要包含四种:IE.Gecko.WebKit.Opera 2.识别浏览器 主流浏览器包含四种:IE.Chrome.Firefox.Opera 3

Node.js 学习笔记之简介、安装及配置

 本文是Node.js学习笔记系列文章的第一篇,主要给大家讲解的是在Windows和Linux上安装Node.js的方法.软件安装版本以0.12.0为例.希望大家能够喜欢.     简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅

MySQL数据库学习笔记(一)

mysql|笔记|数据|数据库         我一直从事Informix和Oracle数据库开发,有一天发现网络上有一种小巧别致的数据库,被广泛使用,从MySQL的网站http://www.mysql.com/我下载了它的数据库软件,使用过后觉得真的挺好,这是我的一点学习笔记希望对各位初学者有点帮助. 1.       MySQL数据库介绍 MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统.MySQ

C#学习笔记(二)

笔记 C#学习笔记(二) write by cash(天下第七)2002.01.20版权所有,翻录不究cashcao@msn.com 选择 我身上携带着精神.信仰.灵魂 思想.欲望.怪癖.邪念.狐臭它们寄生于我身体的家 我必须平等对待我的每一位客人-----------伊沙:<原则> 我的名字是cash,所以我很功利主义:我的星像是Leo,所以我很大男人主义:我的语言是C#,所以我有点儿拿不定主义. /* 你能看得出来,这不是一篇正规的技术文章,所以若你不小心从里边读到了一个爱情故事,可不要奇

python学习笔记第二章:安装python

记得上次写python的学习笔记是三个月以前了,期间看过,也放下过,这次要坚持下来,一鼓作气,吃下python. 本文内容主要是根据<Python 简明教程>和自己的一些理解去写的,有问题,还请指出. 一.Linux 下安装 如果你使用的是linux操作系统,那么恭喜你,你基本上可以不用去安装python,因为大多数linux的操作系统在安装系统的时候就已经默认安装了python. 要测试你的系统是否已经安装了python,可以执行如下命令 python -v 显示如下的python版本信息,

Perl学习笔记之CPAN使用介绍

  这篇文章主要介绍了Perl学习笔记之CPAN使用介绍,本文讲解了什么是CPAN.CPAN的目录作用介绍.CPAN安装Perl Module的两种方法等内容,需要的朋友可以参考下 CPAN(Comprehensive Perl Archive Network:全面的Perl存档网络)是查找任何Perl有关的东西的中心仓库.它包含从整个Perl社区收集来的智慧:成百上千的 Perl模块和脚本,相当于好几本书的文档,以及整个Perl发布.如果有东西是用Perl写的,而且这个东西很有用而且是自由的,

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴

kvm虚拟化学习笔记(五)之windows虚拟机性能调整

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1290682 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linuxkvm虚拟机安装htt

kali linux web渗透测试学习笔记

    kali linux web渗透测试学习笔记 metasploit使用方法: 启动: 第一步:启用Postgresql服务.service postgresql start 第二步:启用metasploit服务.service matasploit start 第三步:启动框架.msfconsole 一个ASP站点的sql注入 测试数字型注入点 1.网址:asp?ID+13,后面加',看看是什么数据库,然后输入1=1,1=2,得到数据库是microsoft acess 2.转用sqlma