操作系统学习笔记

简介: 对文件系统原理学习的理解   按需分配。打开的文件属性才放入内存中。关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小文件名,磁盘块地址,多个。
 
对文件系统原理学习的理解
 
按需分配。打开的文件属性才放入内存中。
关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小

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




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

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

1、连续分配法

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

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

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

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

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

2、链表分配法

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


现在明白了,内存中的文件分配表。
实际上就是为每个文件做一个条目。这个条目里面记着磁盘块的指针,指针是从开始到结束,按照顺序来的。
 
 
 
 
 
 
 
 
为什么window要进行分区而linux系统不用分区?

现在明白其中原理了。

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

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

 

 

分段和分页技术

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

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

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

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


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

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

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

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

目录
相关文章
|
9月前
|
存储 缓存 Linux
计算机操作系统学习笔记(2)——存储器结构
计算机操作系统学习笔记(2)——存储器结构
157 0
|
4天前
|
监控 Linux 调度
操作系统学习笔记(一)
在Linux中,使用`ps -aux | grep PID`来查看特定进程的状态,或者用`top`指令监控进程和内存。通过`cat 文件名 | grep 关键词`或`grep -i 关键词 文件名`搜索日志文件。`grep`是一个强大的文本搜索工具,支持多种参数,如`-i`忽略大小写,`-c`计数,`-f`从文件读取关键词。要临时更改主机名用`hostname 新主机名`,永久更改则用`hostnamectl set-hostname 新主机名`
|
4天前
|
消息中间件
操作系统学习笔记(二)
进程切换比线程切换更消耗资源,因为进程切换需保存更多上下文,包括地址空间、寄存器、栈和文件描述符等,还要刷新TLB。线程切换仅需切换硬件上下文和内核栈,上下文更小,所以开销低。进程间通信有多种方式,如匿名管道(父子进程间)、命名管道(无亲缘关系进程)、信号、消息队列、共享内存和信号量等。这些通信方法各有特点,适用于不同场景。例如,匿名管道是半双工的,有名管道允许任何进程通过路径通信,信号用于进程间的简单通知,消息队列支持随机查询和按类型读取,共享内存允许多进程共享数据,而信号量则用于同步和控制对共享资源的访问。
|
4月前
|
Ubuntu Unix Linux
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
|
9月前
|
缓存 Linux 应用服务中间件
计算机操作系统学习笔记(11)——零拷贝
计算机操作系统学习笔记(11)——零拷贝
59 0
|
9月前
|
消息中间件 Shell Linux
计算机操作系统学习笔记(7)——进程通信
计算机操作系统学习笔记(7)——进程通信
65 0
|
9月前
|
存储 缓存 Linux
计算机操作系统学习笔记(5)——内存管理
计算机操作系统学习笔记(5)——内存管理
81 0
|
5月前
|
程序员 Linux
不愧是华为内部的“操作系统学习笔记”,一篇说细节,一篇讲哲学
当然重要,身为程序员的我们,那更应该深刻理解和掌握操作系统,虽然我们日常 CURD 的工作中,即使不熟悉它们,也不妨碍我们写代码,但是当出现问题时,没有这些基础知识,你是无厘头的,根本没有思路下手,这时候和别人差距就显现出来了,可以说是程序员之间的分水岭。
|
8月前
|
编译器 调度 C语言
【学习笔记】小 O 带你掌握操作系统的心跳 - OneOS 内核启动
一、简介 内核启动介绍了整个系统从硬件上电如何一步步进入用户程序的过程。一般情况下,启动过程分为硬件上电,首先运行和体系架构相关的启动汇编文件,进行一些最基本硬件的初始化 (例如 CPU 配置,时钟,栈地址,RAM 等),为内核运行铺垫好环境,然后初始化内核各模块 (例如调度器,定时器等),接着创建系统任务 (例如空闲任务) 和用户任务,最后启动调度和运行用户程序。
89 0
|
9月前
计算机操作系统学习笔记(14)——复习要点笔记
计算机操作系统学习笔记(14)——复习要点笔记
54 0