![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 53
liangximin2046
学生
展开
-
操作系统之常用磁盘调度算法
0 前言最近读ClickHouse的相关书籍时,涉及了一些磁盘与文件系统的知识,再次回顾了一下操作系统,特此记录。1 基础知识如下图所示,普通的磁盘由磁盘轴、盘片、磁头、读写头这些组件组成。当在磁盘上进行读写时,磁盘进行高速旋转,读写头到达对应位置进行操作,所以对磁盘进行读写操作是比较耗时的。这个时间由以下几部分组成:等待设备可用与通道可用寻道时间(最耗时)磁盘旋转时间读写时间而磁盘调度算法就是针对寻道时间所作的优化。2 调度算法2.1 先来先服务(FIFO)这个算法很好理解,原创 2021-03-29 14:33:59 · 542 阅读 · 0 评论 -
守护进程概念及Linux下的创建方法
0 前言最近在写一个HTTP服务器,打算做成apache服务器那样的守护进程使其后台运行。在写的时候发现守护进程有很多讲究的地方,特此记录。1 守护进程概念守护进程的英文为Daemon,词源是希腊神话中半神半人的精灵,负责默默守护一个人的灵魂从生到死。那么顾名思义,守护进程就是指那些在后台运行、不占有终端、生命周期很长的进程(一般从开机到关机)。Linux中常见的守护进程有ssh(远程登录)、httpd(web服务)。2 创建守护进程创建守护进程的步骤如下:执行fork(),让父进程退出,子进原创 2021-01-08 22:15:18 · 193 阅读 · 0 评论 -
死锁相关问题与哲学家吃饭问题
0 死锁概念在并发编程中,死锁是一个常见的概念,它是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。举例来说,如下图所示,进程1在已经锁定资源1的情况下,去申请锁定资源2,很不巧,资源2已经被进程2锁定了,所以进程1只能原地阻塞等待,更不巧的是进程2在执行过程中又来申请资源1,同样的道理进程2也只能原地阻塞等待,二者互不相让,所以只能永远等待下去。原创 2020-12-16 14:47:03 · 415 阅读 · 0 评论 -
并发编程中条件变量(condition variables)实现原理
0 介绍以前只是会使用Linux下的条件变量pthread_cond_t,知道它的作用是配合互斥锁解决并发编程的同步问题,没有思考过它的实现原理,今天学习了清华大学陈渝老师的操作系统网课,总算是明白了,特此记录。1 实现条件变量是一种等待机制,每一个条件变量对应一个等待原因与等待队列。一般对于条件变量会有两种操作:wait操作 : 将自己阻塞在等待队列里,唤醒一个等待者或者开放锁的互斥访问singal 操作 : 唤醒一个等待的线程(等待队列为空的话什么也不做)下面看看它的伪码描述,两个变量一原创 2020-12-05 16:04:47 · 3408 阅读 · 2 评论 -
操作系统自旋锁和互斥锁的实现原理
0 介绍对多线程编程有过了解的朋友一定知道锁的概念,它的作用是为了保证临界区的代码在多线程下能够正常工作,也就是说,锁将保证共享资源在任意时刻只能有一个使用者。过去博主我也只是知道锁是如何使用的,对其内在原理并不了解。今天看看了看清华大学陈渝老师的网课,对锁的实现有了一定认识,特此记录。1 原子操作理解锁的实现,首先要理解Cpu的原子操作。现代的cpu都提供一些特殊的原子操作,他们执行的时候将不能被中断,如CAS(compare and swap)、Test-And-Set。这两种操作均可以实现锁,原创 2020-12-04 19:55:54 · 1759 阅读 · 0 评论 -
内存碎片与产生原因
1 内存碎片概念操作系统进行连续内存分配时,常常会出现不能被用户使用的小片区内存,这就是所谓的内存碎片。内存碎片可以分为外部碎片和内部碎片,下面来解释一下。2 产生原因2.1 内部碎片所谓内部碎片,是指内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间。内部碎片产生的原因在于因为分配的内存起始地址必须可被 4、8 或 16 整除,如申请7字节空间,可能会获得8或16字节空间,实际上多余的空间是不可使用的。2.2 外部碎片外部碎片指的是还没有被分配出去(不属于任何进程),但原创 2020-09-27 18:50:06 · 2119 阅读 · 1 评论 -
计算机开机后操作系统的加载过程
0 介绍最近开始学习操作系统知识,并打算实现一下ucoreOs的核心内容。那么对于学习操作系统来说,遇到的第一个问题便是在计算机开机后,它是如何开始工作的。下面是计算机加载操作系统的流程。1 加载当我们打开计算机电源时,第一步:计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序(BIOS是主板上自带的一块存储器,里边烧录了固定的基本输入输出系统,不是由自己定义)。这个BIOS程序会自动检测主板上各个接口的状态,也就是是否连接了相应的设备(硬盘,网络原创 2020-09-04 17:19:01 · 8505 阅读 · 0 评论