
OS学习
文章平均质量分 91
VioletCherry
这个作者很懒,什么都没留下…
展开
-
日常随笔-2-谈缓存
引言最近忙着找工作,都没时间更新,今天忽然有点想法,想写一篇关于缓存的文章,仅仅是自己的一点看法。如果说到缓存,大家可能会想到CPU的高速缓存、Redis、MemCached,还有自己实现的单机本地缓存,它们的作用其实都是一个,那就是方便我们的应用可以更快的获得我们需要的数据。在远古计算机时代,计算机CPU的速度很慢,存储设备的速度也很慢,所以这个时候我们可能都用不上缓存,因为没必要嘛,CPU速度和存储设备的速度一致。随着技术的发展,CPU由晶体管发展成超大规模集成电路使得cpu的发展发生了质变,c原创 2020-11-14 22:07:20 · 246 阅读 · 0 评论 -
操作系统-11-死锁原理
引言计算机的某些资源同一时间只能一个进程或线程使用,比如打印机,如果两个进程同时使用打印机便会出问题。所以需要使用锁来控制进程并发的使用某些资源,但是不恰当的使用锁会造成一个严重的问题。举个例子,进程A申请扫描仪,A获得扫描仪;进程B申请刻录仪,B获得刻录仪,此时进程A需要申请刻录仪,而进程B要申请扫描仪,因为进程A、B都需要有扫描仪和刻录仪才能完成工作,因此这个过程将一直等待下去,这就叫做死锁。死锁可以发生在各种各样的场景,比如数据库,接下来学习死锁的发生和死锁的检查以及死锁的避免和解决资源大部分原创 2020-07-26 22:57:23 · 416 阅读 · 0 评论 -
操作系统-10-I/O-基本原理
引言上一篇学习了文件系统的原理,我们知道了操作系统是如何管理文件的,但是却没有学习磁盘是如何处理操作系统发出的读写操作,这一篇我们要学习操作系统是如果实现I/O和管理I/O的。什么是I/OI/O包含两部分,I/O设备和I/O接口以及如何管理I/O设备,I/O设备就是我们常见的磁盘、网卡、鼠标键盘、打印机和显示器等。接下来的文章就要学习I/O设备、I/O模型和I/O、中断处理和错误处理。I/O硬件原理IO设备块设备:存储信息在固定大小的块,每一个块都自己的地址,所有的传输单元都是一个或者多个块原创 2020-07-23 20:47:29 · 1543 阅读 · 0 评论 -
操作系统-番外-基于NAND存储设备文件系统F2FS
背景由于磁盘的机械特征,导致要想提升它的读写速度是非常困难的。因此SSD应运而生,它的读写速度,因为没有磁头,导致其寻道时间几乎为0。SSD的分类基于闪存类:采用FLASH芯片作为存储介质,擦写次数有限制基于DRAM的固态硬盘:采用DRAM作为存储介质,它是一种高性能的存储器,而且使用寿命很长,美中不足的是需要独立电源来保护数据安全针对闪存ssd的特性,虽然其速度快,我们知道大部分的I/O操作都是随机写,如果不仔细的处理,会严重增加I/O的延迟和缩短SSD的寿命。虽然LFS和BTRFS有效的降原创 2020-07-18 12:00:39 · 978 阅读 · 0 评论 -
操作系统-番外-老牌Linux文件系统ext
引言和标题一样,ext文件系统是一个老牌的Linux的文件系统,是Linux的第一个文件系统。虽然业界将Ext文件系统看成是一个过度用的文件系统,但是现在的Ext4依然有很强的生命力。从ext2-ext3-ext4,文件系统的磁盘布局没有发生太大的变化,从ext2到ext3,主要是增强了可用性、数据完整性、速度、易于迁移等功能;ext3到ext4就不仅仅是功能增强,它修改了某一些重要的数据结构,并且在对大文件的支持上做了更多的优化改进Ext文件系统磁盘布局Ext2文件系统磁盘布局ext文件系统从ex原创 2020-07-09 23:06:56 · 420 阅读 · 0 评论 -
操作系统-番外-日志结构文件系统LFS
引言过去几十年CPU速度的增长是巨大的,但是磁盘的访问速度却增长较慢。内存近些年发展也很快,可以提供较大的空间存储程序的工作集,因此磁盘传输主要是被写操作支配。因此如何提升写效率是有效利用磁盘的关键。日志结构文件系统是用顺序写,因为省去了绝大部分seek操作,因此大大提升了写的性能。还有一个好处就是系统崩溃恢复,日志结构文件系统只需要检查最近的部分日志日志结构文件系统实现基本假设大部分的读请求都从缓存中读取大部分磁盘访问都是写请求段概念段定义:虽然磁盘顺序写效率高,考虑一下,如果有一原创 2020-06-29 22:38:44 · 1491 阅读 · 1 评论 -
操作系统笔记-9-文件系统
引言之前已经学习过数据在内存中是如何表示,如何存储,但是这些存储在PC断电后数据便消失。因此我们需要一个可以持久化存储并且容量远远大于内存的结构,这一篇我们将学习,文件是如何被组织和操作的,这是一个操作系统重要的部分-文件系统。文章的结构主要分为文件和目录的概念、文件系统的实现、文件系统的管理和优化、最后是例子。文件和目录基本概念文件文件定义:文件是一种抽象的概念,它提供了一种方法可以将信息存储到硬盘并且随后读取回来。文件命名:文件命名规则是通常分为两部分,小数点后的叫文件扩展名(不是必须原创 2020-06-26 18:24:05 · 537 阅读 · 1 评论 -
操作系统笔记-8-高速缓存
引言上一篇学习了虚拟内存,虚拟内存解决了多道程序并发运行的内存分配和解决小内存运行大程序的问题。这一篇将讲解高速缓存,来解决内存的低速和cpu高速不匹配的问题,计算机的很多的问题,其实都可以中间加一层解决,因此计算机才变得复杂,想象一下如果主存的速度可以匹配cpu的速度那么高速缓存就不需要了,再进一步,假设硬盘的速度可以匹配cpu,我想主存也可以不需要了。但是现有的技术还达不到这个目标,所以这一部分还是得学习一下高速缓存,看看高速缓存是如何解决cpu快速访问指令和数据的问题。基本概念CPU、缓存、内存原创 2020-06-14 17:06:44 · 495 阅读 · 0 评论 -
操作系统笔记-7-虚拟内存
引言上一篇笔记讲述了内存的地址空间抽象,但是还留下了问题,那就是当软件很大的时候虽然利用Swapping技术可以运行,但是每次交换整个进程的空间开销不容忽视,虽然近年来内存也有增长,但是软件大小增长的速度远大于内存增长的速度。一个解决方法是Overlays(覆盖),Overlays将程序分割为多个片段,称为覆盖,当程序开始时,覆盖管理器加载覆盖0,执行完成后,通知覆盖管理器加载覆盖1,然后覆盖1会在覆盖0top上(如果有空间),或者直接在覆盖0(如果没空间)。虽然,换入换出覆盖块由操作系统完成,但是需要原创 2020-06-13 14:33:15 · 632 阅读 · 0 评论 -
操作系统笔记-6-内存管理基础
引言花了一段时间才把之前的笔记整理了一部分,平时太忙也没啥时间。今天开始整理内存管理部分的,内存管理部分大致分为三部分笔记,第一部分就是本篇内存管理基础,第二部分是虚拟内存,第三部分高速缓存。一个程序在运行前,只是一个存储在磁盘上的可执行的二进制文件,包括可执行指令和数据。当程序运行时,这个二进制文件会被加载到内存中,指令和数据在执行时会被cpu从内存中加载到寄存器中,然后执行,可能会把执行结果再次存入内存中。数据以何种形式存在内存,如果为进程分配内存,进程退出如何回收,这个过程叫内存管理,接下来就详细原创 2020-06-08 22:38:22 · 286 阅读 · 0 评论 -
操作系统笔记-5-进程&线程同步
引言前一篇介绍了进程和线程调度,知道线程和进程在系统中是并发执行,这将会引发出一些问题。接下来从一个简单的生产者和消费者例子说起,从前有两个进程,一个进程负责往一个buffer里写数据,我们把它叫做生产者;一个进程负责消费数据也就是取走buffer里的数据,我们把它叫做消费者。因为我们要记录写到哪里,所以需要一个变量in来记录,还需要一个变量记录消费到哪里了out,现在我们假设核心的生产者代码段。 while (true) { while (count == BUFFER SIZE)原创 2020-06-05 23:17:52 · 518 阅读 · 0 评论 -
操作系统笔记-番外-操作系统经典书籍推荐
最近整理以前的笔记,有人问关于操作系统的书籍。我有个爱好喜欢收集书籍,前后也收集了几百本高质量的书籍,这里给大家推荐基本关于操作系统的书籍Operating System Concepts 10th edition又称恐龙书,这本书已经出到第10版,可见其经典。作者是想从理论层面把问题的产生和解决思路阐述清楚,包含了操作系统各个方面,是一本非常不错的入门书籍。豆瓣书评下载地址:https://github.com/woodliu/Operating.System.Concepts.10th.Ed原创 2020-06-03 22:25:41 · 685 阅读 · 0 评论 -
操作系统笔记-4-进程&线程调度
引言当我们在平时工作或学习中用电脑的时候,我想很多人都是一边听着音乐一边写代码、看文档、编辑Markdown写笔记或者Chrome看着网页,不知道你有没有好奇电脑为什么可以可以同时完成这些程序的运行,并且如果你细心可能发现了有时候程序的响应快,有时候响应慢。这些都是因为进程&线程调度的结果,哪怕你的电脑处理器只有一核,可同时同时执行多个应用程序。为何需要调度并不是所有的程序都是cpu密集型的,也有I/O密集型,如下图,a是cpu密集型任务,它有很长的cpu周期,而b则持有cpu的时间短但是却很原创 2020-06-02 22:20:48 · 975 阅读 · 0 评论 -
操作系统笔记-3-线程
多线程出现传统的进程都是单线程的程序。我们总是希望自己的程序有更高的并行性,传统进程也是有办法实现这种并行性,那就是通过子进程,但是子进程是独立的数据空间,很多时候程序的不同任务都是需要访问相同数据的,因此子进程有很大的局限性。在这种需求场景下,多线程出现了,它弥补了子进程的缺陷,因为进程内的线程共享进程的资源,可以很容易实现数据共享。线程概念线程在进程内部,它共享进程的地址空间。线程属性线程共享执行代码,data分段和打开的文件。但是有独立寄存器、程序计数器、状态和栈。第一列是线程共享的进程原创 2020-05-27 22:40:01 · 502 阅读 · 0 评论 -
操作系统笔记-2-进程
进程是什么大部分资料都描述进程是资源分配的基本单位,但是这个描述并不能很好的描述进程的特性;另一个种描述是进程是对运行程序的一种抽象,我更赞同这种说法,第一它说明进程和程序有关系,第二它说明必须是运行中的程序。我们看一下Linux下的进程。进程概念进程内存布局进程的内存布局被划分为多个分段,具体如图text分段:存放可执行代码,也就是程序的代码data分段:存放全局变量heap分段:程序运行期间动态分配的内存stack分段:方法调用的临时内存(比如方法参数、返回地址和临时变量)一个原创 2020-05-24 22:54:05 · 367 阅读 · 0 评论 -
操作系统笔记-1-操作系统概述
背景很早就看了《MODERN OPERATING SYSTEMS》这本书,当时也做了很多笔记。为了方便自己能更好的温故知新,也为了防止自己的笔记丢失,遂搬到云上(手动狗头)。这是操作系统学习笔记的一个系列,这是第一篇笔记,主要是讲个操作系统的大概,以及它是个什么东西,能做什么,我们平时做开发是怎么和它打交道。做开发要不要了解OS答案肯定是要的。其实这个问题和写程序要不要学算法一个道理。如果觉得没用,只能说明你写的程序可能还停留在CRUD阶段(不要打我,没有贬低的意思)。我们都知道,但凡做的稍微深一点,原创 2020-05-23 21:46:04 · 459 阅读 · 0 评论