实现自己的OS
仿照Linux操作系统,从0到1搭建自己的OS
hawonor
在下烂梗王
展开
-
操作系统页面置换算法-看了也就差不多懂了
操作系统页面置换算法前言什么是页面置换算法解决方法先进先出页面置换算法(fifo)最佳置换算法(opt)LRU算法前言不多说废话了,不是很了解这个算法是干啥的,现在开冲。什么是页面置换算法很简单,咱们还是看看严格的定义好了。在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。很显然,这是进程遇到的困难,是操原创 2020-07-03 18:47:15 · 222 阅读 · 0 评论 -
大端模式和小端模式-以前犯过这样的错误
大端模式和小端模式-以前犯过这样的错误前言大端与小端分个类吧为啥要分模式如何检测大小端模式我个人遇到的问题前言之前的项目中接触过这个问题,但是实在是难以记忆,咱们就当做是重新学习好了。大端与小端定义其实是很简单的,大端就是咱们习惯从低地址看向高地址时的阅读顺序,我举个32int的例子好了,从低地址到高地址分别是高位字节和低位字节。小端模式就反过来,懂?分个类吧像我工作中使用的ARM芯片,默认是小端模式(就是读起来不顺畅),但是可以在程序中设置CPU的某些寄存器,实现大端模式和小端模式的切换。也就原创 2020-07-03 17:44:36 · 391 阅读 · 0 评论 -
关于进程与线程的同步和线程的那点问题
关于进程与线程的同步和线程的那点问题前言进程同步线程同步volatile线程安全么线程状态转移表与条件如何获取线程状态前言我感觉看了一圈面经后发现,我对进程与线程还存在着认识上的漏洞,这次开个帖子再讲清楚这个东西。进程同步我整理了三种方式,其中临界区我就不写了。进程同步的三种方式是:1.semaphore2.mutex-spinlock3.event线程同步1.临界区2.semaphore3.mutex-spinlock4.eventvolatile线程安全么当然不!线程状态原创 2020-06-21 01:53:58 · 171 阅读 · 0 评论 -
Linux的IO模型介绍-epoll、poll、select
Linux的IO模型介绍-epoll、poll、select同步与异步IO阻塞与非阻塞IO这俩类根本就不是一回事情Linux的IO模型1.阻塞IO非阻塞IO异步IO多路复用IO(其实这就是同步IO!!!)selectpollepollepoll的两种工作模式:电平触发与边沿触发总结同步与异步IO这个概念其实很简单,A让B去做一件事情,然后B先回复了一声“好的”,再转而去做这件事情,那么这就是异步。如果B先做完了这件事情,然后再回复A“我做好了”,那么这就是同步。所以说,同步还是异步,那是针对被调用者B原创 2020-06-20 23:16:15 · 217 阅读 · 0 评论 -
进程之间通信的几种方式,总有一款适合你
进程之间通信的几种方式前言shared memoryPipeMsgMsgQueue前言这个问题面试官必问的好吧,这是非常经典的问题,正好之前的项目中有这样的经历,所以就咱们的项目出发,讲一下进程之间通信的几种方式。shared memory共享内存,大家读写双方约定一块内存地址,然后咱们分别读写这块地址的数据(当然,大家也要一起约定好数据的格式)。记得加锁哦。咱们看一下shared memory的写和读是咋搞的: //1.没有锁的话,创建锁,然后尝试获取锁 HANDLE Gmute原创 2020-06-20 18:35:01 · 324 阅读 · 0 评论 -
银行家算法-避免死锁的好方法
银行家算法-避免死锁的好方法前言银行家算法大概说一下算法流程引用一下博客园@王陵的一张图具体实例总结前言死锁问题是面试官最喜欢的问题,我在之前的一篇文章里写了死锁的产生条件,这里我写一个死锁的预防算法。银行家算法为什么叫银行家算法呢?其实就是类比银行给客户放贷这件事情。银行家手里的资金是有限的,他决定是否给某个顾客放贷,得看一看自己手上的剩余资源,和顾客的贷款额度。大概说一下算法流程首先呢,银行家算法会创建一些资源列表,包括初始化时最大资源数量列表,目前剩余的资源数量列表。那么进程呢,也有自己原创 2020-06-20 15:00:00 · 1387 阅读 · 0 评论 -
聊聊Linux下fork与线程池
Linux下fork与线程池前言线程池前言这个知识点也是老生常谈了,咱们今天就把他讲清楚弄明白。线程池原创 2020-06-13 21:10:08 · 202 阅读 · 0 评论 -
系统启动时的故事
系统启动时的故事前言一点基础知识开机第一棒:BIOS开机第二棒:MBR开机第三棒:内核加载器前言其实这里的系统,偏向于Linux系统。写这篇文章的原因是,我在看牛客网的腾讯面经时,无意间发现了这个问题。这个问题于我应该是没问题的,这里我给大家科普一下,从按下电源开机键,到最后系统启动成功,这里面究竟发生了什么。一点基础知识程序究竟是如何运行的呢?CPU的电路被设计成只能运行处于内存中的程序,因此,一个存放在磁盘中的程序想被运行起来,那么一定需要被加载器加载到内存中,然后将CPU的指令寄存器cs:ip原创 2020-06-07 15:31:46 · 240 阅读 · 0 评论 -
用很简单的方式教你学临界区、信号量、互斥锁
临界区、信号量与互斥锁前言Linux下的进程与线程CPU如何调度进程和线程临界区信号量与互斥锁有趣的生产者-消费者问题结束语前言这也算是面试必备的知识了。其实这东西还是非常简单的,这篇文章争取把你教会。为什么要搞这么个信号量和互斥锁呢?其实很简单,同一个资源(比如同一块内存或者是同一个IO外设)同时被不同的进程访问(A进程想写入一些东西,恰巧B进程也想写入一些东西),最后的结果很有可能就出乎意料,所以在访问一些公共资源时,大家要排好队,一个个来访问,避免冲突。Linux下的进程与线程有人这么说:进原创 2020-06-05 14:31:24 · 374 阅读 · 0 评论 -
内存分配方式介绍-面试最喜欢问的东西
内存分配方式介绍前言跑偏了静态存储区栈区堆区我当时是怎么回答的传统的malloc free / new delete方式前言关于内存分配方式,这可是面试官最喜欢问的问题了。前几天笔试一家公司的我也被问到了这样的问题。难么?朋友,肯定不难,咱们今天就把malloc,free,new,delete以及内存分配方式都讲清楚(我尽力吧)跑偏了看了别人的回答我才发现,原来内存分配表示的是静态存储区域、栈和堆。。。。。。我丢,看来是真的跑偏了。没事儿,咱们重温一下这仨东西。静态存储区比如一些全局变量,或者是原创 2020-06-04 14:54:50 · 502 阅读 · 0 评论 -
汇编语言简介
汇编语言简介编译流程汇编是什么实模式和保护模式寄存器介绍四个数据寄存器两个变址寄存器两个指针寄存器六个段寄存器一个指令指针寄存器一个标志寄存器堆栈模型具体指令通用数据传输指令输入输出端口传送指令目的地址传送指令标志传送指令算数运算指令串指令无条件转移指令条件转移指令循环控制指令中断指令处理器控制指令伪指令标志处理指令nasm简介编译流程不知道你有没有思考过,咱们平时写的c程序,是如何被编译成可执行文件的?比如我有main.c & some.c & some.h这三个文件组成一个proj,原创 2020-05-27 12:07:58 · 1373 阅读 · 0 评论 -
makefile简介-看了以后就差不多能写一手makefile
makefile介绍前言makefile./ ../基本格式伪目标递归推导定义变量系统变量实战前言有没有一些朋友和我一样,在做工程开发时,修改了一点文件内容后究竟是要build还是rebuild all?文件与文件之间的互相依赖关系究竟是如何体现的呢?makefile简言之,makefile就是表达文件之间的依赖关系的东西。咱们的编译器比较棒,帮咱们实现了这一步,所以很多朋友不了解如何写一个工程的makefile文件。make是如何发现文件有更新呢? 这是和文件的时间属性有关系。当我们修改了文件后原创 2020-05-27 09:57:05 · 378 阅读 · 0 评论