OS
文章平均质量分 76
神童i
百花发时我不发我若发时都吓杀
要与西风战一场遍身穿就黄金甲
展开
-
编译并运行Linux内核
目录0、环境1、编译内核2、创建根文件系统3、安装qemu并执行4、参考0、环境系统:Linux Mint 19.1 Tessa 内核版本:4.15.0-96-generic(该版本是笔者开发机的版本,不是要编译的版本) 虚拟机:qemu2.11.1 平台:x86_64 根文件系统:buildroot-2021.02.3 创建 编译过程中的依赖等自行安装。1、编译...原创 2021-07-05 18:29:35 · 1091 阅读 · 0 评论 -
操作系统内核写后感
最近用的几个月的时间,大体写了一个简单的微内核的操作系统内核,还是想继续写下去,关于一个简单的内核开发有一些思考。 首先要选定好语言,我刚开始想用C来写,但是一想现在很多书都是用C来教学写内核的,如果我也用C,那我那容易就由于惯性,把人家的代码抄上了,所以决定用C++来写,但是用C++写的时候,又发现了一些问题,比如无法使用运行时库,对于C++运行时的特性无法使用,甚至全局对象都不构造(...原创 2020-04-11 20:04:43 · 221 阅读 · 0 评论 -
微内核将内核进程放入用户态的问题
不论宏微内核,要进行系统调用,首先要陷入内核态,对于宏内核,陷入内核态后,调用内核态的函数来实现相应功能; 对于微内核,陷入内核态后,进行消息传递,然后等待结果。 可以看到,不管宏微内核,都必须要陷入内核,也就是执行int 0x80这种指令,但是陷入内核这种操作是比较耗时的,要...原创 2020-04-03 15:01:23 · 804 阅读 · 0 评论 -
浅淡微内核地址空间是否独立问题
现在操作系统主要有宏微内核两种设计方法。(当然不只这两种) 大家经常接触到的Linux是宏内核的,而微内核并不是在Linux之后才出现的设计理念,而是在Linux之前就有微内核的操作系统了。 那为什么Linux还要采用宏内核呢?最主...原创 2020-04-02 17:20:16 · 335 阅读 · 0 评论 -
bochs模板配置文件及配置网卡
设置bochs使用网卡:根据下面的模板文件相应的内容,在配置文件中添加:ne2k: ioaddr=0x280, irq=10, mac=b0:c4:20:00:00:99, ethmod=linux, ethdev=wlp2s0ethdev不一定都是eth0, 要根据ifconfig的实际输出来确定。在设置irq时注意不要冲突。以上设置能保证正常启动,但能否正常使用还未测试。模板配置文件...原创 2020-01-15 14:28:41 · 1679 阅读 · 0 评论 -
读取CMOS时间并转为十进制
CMOS字节信息(仅列出比较常用的字节)偏移值描述0当前秒数2当前分钟4当前小时6星期几7一个月中的第几天8几月9年(仅表示后两位,如2021年,存放的数据为21)读取CMOS时间步骤:先向地址端口(0x70)发送偏移信息,告诉它要读的分,时还是秒从数据端口(0x71)读出一个字节数据。比如要读取当前月份:o...原创 2020-01-13 14:34:50 · 984 阅读 · 0 评论 -
fork原理--Linux实现
fork的一些特征是怎么实现的?比如:为什么父进程返回子进程pid, 子进程返回0?子进程是如何做到与父进程“一模一样的”?子进程同父进程一样,都是从调用fork处继续向下执行,而不是子进程从头执行?下面直接看源码来分析。注:如果不额外说明,为了阅读方便,以下展示源码都已删减。从父进程调用fork开始; 就不写程序了。大家都知道,这是一个系统调用,当父进程调用fork()时,大...原创 2019-12-03 19:43:34 · 3178 阅读 · 0 评论 -
Linux页出错处理及需求加载,写时复制源码分析
写时复制:若干个进程都是读一个页面数据时,则共享这一个页面,不需要复制这个页面。(节约内存并加快进程创建速度),当某个进程想要对这个页面进行写操作时(修改数据),会影响共享这个页面的其他进程,这时才把页面进行复制(分别持有不同的页面),这时进行写操作不会影响到其他进程。只有在写的时候才复制。需求加载加载一个进程时,不会把这个进程的所有数据全部加载到内存,而是仅分配必要的内存,没有给代码段和...原创 2019-11-30 10:38:03 · 1420 阅读 · 0 评论 -
Minix进程间通信分析
进程间通信(IPC: Inter-Process Communication), 可以直接理解为进程间互相发送消息,进程间互相发送消息的方式有很多,比如消息传递,管道,共享内存等都可以,本文主要分析消息传递方式在Minix内核中是如何工作的。为什么需要进行进程间通信?宏、微内核系统调用区别?进程A要给B发送消息,说明进程A有求于进程B,A和B共同协作才能完成一项任务,如何只有A是完成不了的。...原创 2019-11-04 16:16:54 · 1599 阅读 · 0 评论 -
Linux系统调用过程分析
本文以write()来简要分析一下Linux系统调用过程:write系统调用:函数定义如下:lib/write.c其中_syscall是一个宏定义, 内容类似如下:include/unistd.h其实就相当于int write(int fd, const char *buf, off_t count) { … }就是定义了write()这个函数。可以看到,在执行write函数时,...原创 2019-11-03 23:24:16 · 1962 阅读 · 0 评论