![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内核
文章平均质量分 95
tyler_download
这个作者很懒,什么都没留下…
展开
-
java开发系统内核:创建文件操作API
文件系统是所以操作系统的核心,系统的数据必须以文件的方式存储和组织。我们现在的系统没有硬盘,因此所有信息都存储在磁盘里,在内核加载时,引导扇区程序就会把磁盘上相关数据全都拷贝到内存里,于是所有文件内容在系统启动后,会从磁盘转存到内存中。在前几节,我们已经建立了简易的文件系统,本节,我们为文件系统增加几个有利于文件读取操作的API.根据常用的文件API,我们提供的接口将支持以下几种操作: 1,原创 2018-01-06 16:10:08 · 591 阅读 · 0 评论 -
内核开发:实现切换窗口后的键盘输入
我们实现了键盘的输入焦点切换,但尽管控制命令台激活后,如果我们敲击键盘,会发现字符输入的还是前头的Message box.这一节,我们要实现把键盘敲击的内容输入到被切换的窗口。原创 2017-01-30 10:45:00 · 812 阅读 · 0 评论 -
操作系统内核开发:使用Tab键进行窗口切换
我们使用操作系统的时候,一个必不可少的功能就是通过Tab间在不同的窗口中来回切换,这种便捷方式使得你不必要挪动鼠标去点击某个窗口,只要不停的按Tab键,直到你的目标窗口被激活为止,一旦窗口被Tab键激活后,对应的窗口会响应你在键盘的输入,我们本节的目的,是在系统中实现这个功能。原创 2017-01-26 09:59:46 · 774 阅读 · 0 评论 -
系统内核开发:实现命令控制台
操作系统有一个重要的应用,就是命令控制台,像Linux系统,命令控制台集合是使用系统的主要工具。本节,我们将为系统开发一个命令控制台,今后我们会为系统开发应用程序,并且不少程序将会通过控制台来运行。原创 2017-01-23 11:25:00 · 664 阅读 · 0 评论 -
系统内核开发:实现命令控制台
操作系统有一个重要的应用,就是命令控制台,像Linux系统,命令控制台集合是使用系统的主要工具。本节,我们将为系统开发一个命令控制台,今后我们会为系统开发应用程序,并且不少程序将会通过控制台来运行。原创 2017-01-23 11:24:47 · 687 阅读 · 0 评论 -
java开发操作系统:进程间的消息通讯
一个进程将信号发送给另一个进程,让对方及时采取某些动作。由于我们在设计时,为每个进程准备了一个接收信息的队列,因此进程间相互发送消息是,可以把消息放入到接收方的队列中,当接收方从队列中获取数据时,就能收到其他进程发送过来的信息,进而及时处理。原创 2017-03-01 10:34:49 · 2181 阅读 · 0 评论 -
java开发系统内核:实现进程优先级队列
我们把所有进程根据level分成三个队列,进程越重要,它对应的level值越低,这样,当进行进程调度时,进程调度器先查看level等于0的队列是否还有进程,有的话,只执行该队列的进程,如果该队列不止一个进程,那么每个进程根据他们的优先级获得相应的CPU时间原创 2017-01-19 11:06:25 · 680 阅读 · 1 评论 -
java开发系统内核:实现进程优先级
我们有了进程调度,目前来看,所有进程一律平等。我们的调度算法是遍历每一个进程,然后给每一个进程一定的运行时间,然后再切换下一个进程。但实际运用上,进程间不会是平等的,有些进程承担着比较重要的工作,因此,它有理由获得更多的运行时间,例如内核进程,一些进程不是很重要,同理,它就不应该占用过度的CPU资源。本节,我们要引入进程优先级的功能,让优先级高的进程获得更多的运行机会。原创 2017-01-13 10:17:34 · 994 阅读 · 0 评论 -
java开发系统内核:依靠多任务实现多窗口
为了让多任务的特性展示的更直观,本节,我们基于多任务的基础上,为系统实现多个窗口特效,每个窗口都运行于一个任务或进程。由于窗口基于各自不同的进程,因此窗口自身的变化更新不会影响到其他窗口。原创 2017-01-11 10:32:11 · 1127 阅读 · 1 评论 -
java开发系统内核:自动化进程切换
我们已经通过时钟中断完成了两个进程间的相互切换。但当前实现有很大的缺陷,例如我们只能在两个指定的进程间切换,如果要想增添新的进程,那么,没增加一个进程,按照当前模式,我们只能再增加相应代码,这显然是不可接受的。因此,这节,我们希望完成进程的切换机制,使得有新进程时,我们无需改动代码,进程的管理机制会自动把新进场添加进切换机制。原创 2016-12-30 10:51:47 · 1078 阅读 · 1 评论 -
java开发系统内核:实现进程自动切换,再现Linus当年辉煌一刻
Linus当时完成的内核有什么特点呢?当时的内核功能简单,但最重要的是其具有了进程调度功能,它启动了两个进程,一个进程打印出一串"AAAA...", 另一个进程打印出一串"BBBB...."既然我们现在的系统内核已经具备了进程的切换功能,因此,我们更近一步,将现在进程间的主动切换升级为进程间的自动切换,然后每个进程各种打印一个字符,这样就可以再现当时Linus的辉煌一刻了。原创 2016-12-28 16:38:48 · 1033 阅读 · 1 评论 -
java开发系统内核:实现shift按键效果
前几节,我们花费不少精力在键盘响应的处理之上,到目前为止,我们的内核能够准确的将按键字符合理的显示在指定窗口上。但目前还有一些遗憾,就是当前内核对shift 键的按下不做反应。按理,当shift键按下后,再按数字键1,那么显示的字符应该是"!"而不是“1”,本节我们要处理的就是响应shift键的点击处理原创 2017-02-13 09:23:49 · 776 阅读 · 0 评论 -
java开发系统内核:实现回车键的处理
在为我们的系统开发应用程序前,还需要完成最后一点扫尾工作,那就是处理回车键。要启动应用程序,一种常用办法是,在命令行控制台中,键入要运行的程序名字,点击回车,然后系统把应用程序加载起来,因此,响应回车键按下消息是系统必不可少的功能。原创 2017-03-06 11:26:36 · 1089 阅读 · 0 评论 -
java开发系统内核:cls 屏幕清空命令的实现
上节,我们实现了控制台命令mem, 它能显示当前可用内存,本节我们实现另一常用命令叫cls, 该命令的作用是把控制台所以字符全部清空原创 2017-03-22 16:45:38 · 2208 阅读 · 0 评论 -
java开发操作系统:一个程序向另一个程序伸出的咸猪手
一个恶意进程如何侵入用户进程的内存原创 2017-12-06 16:17:51 · 2932 阅读 · 0 评论 -
java开发系统内核:使用LDT保护进程数据和代码
使用LDT局部描述符表保护进程代码和数据原创 2017-12-08 15:28:29 · 545 阅读 · 0 评论 -
java开发操作系统:不锁死控制台的加载用户进程
实现无需锁死控制台的用户进程加载原创 2017-11-14 16:06:48 · 371 阅读 · 0 评论 -
java开发操作系统:启动任意多控制台窗口
实现任意多个控制台窗口的创建和关闭原创 2017-10-13 16:45:11 · 1909 阅读 · 0 评论 -
java开发系统内核:键盘和窗口关闭API
为窗口程序添加键盘响应原创 2017-08-25 11:44:23 · 630 阅读 · 0 评论 -
java开发系统内核:防范缓冲区溢出和强杀死循环程序
本节我们给内核添加上缓冲区溢出的防范功能,以及通过中断强杀死循环进程原创 2017-07-29 16:54:41 · 829 阅读 · 0 评论 -
java开发系统内核:让内核从严重错误中恢复
我们看看,当执行应用程序遇到严重错误时,内核如何从严重的错误中恢复回来继续运行。原创 2017-07-06 12:02:49 · 2391 阅读 · 1 评论 -
java开发系统内核:像Linux一样使用中断实现内核API
我们必须想出新的API提供办法。常用的做法是,仿照Linux 将API当做一个中断调用,由此应用程序在使用API时,只需要记住API对应的中断号,然后使用指令int 即可。原创 2017-05-31 10:58:43 · 663 阅读 · 0 评论 -
java开发系统内核:实现基于FAT12文件系统的dir命令
本节要实现的控制台命令是dir, 熟悉该命令的同学都了解,它的作用是列举出当前目录下的文件信息。问题在于,我们当前的操作系统根本没有硬盘,更没有文件系统,那么这个命令列举的文件从哪里来呢?由于我们的系统内核是存储在软盘上的,因此,我们直接把软盘当做系统硬盘,该命令列举的是存储在虚拟软盘上的文件原创 2017-03-31 16:44:19 · 3238 阅读 · 1 评论 -
java开发系统内核:实现type命令读取文件内容
上一节,我们通过dir命令,能够列出存储在磁盘上的各个文件,当时我们只是把文件描述信息写入磁盘,但文件的内容并没有实际写入,本节,我们将在磁盘上写入文件的内容,同时实现type命令,通过type,我们可以把对应文件的内容在控制台上显示出来原创 2017-04-09 11:43:11 · 962 阅读 · 0 评论 -
java开发系统内核:进程切换
上一节,我们初步介绍了进程相关的具体概念,特别是讲解了进程切换相关的数据结构,也就是TSS,也实现了进程的自我切换,本节,我们看看如何从当前的进程切换到新进程,然后再切换回来,也就是:进程A -切换->进程B-切换->进程A.原创 2016-12-23 15:13:34 · 1270 阅读 · 0 评论 -
java开发系统内核:进程初体验及代码其实现1
操作系统内核开发,一个及其重要的模块是进程以及进程调度。在大学的操作系统课堂上,研究进程和相关调度算法,是一块耗时耗力的内容。市面上,讲解操作系统进程概念以及调度算法的内容可谓是汗牛充栋,记得我以前读相关内容时,看到很多算法流程图,伪码说明等等,说了一大堆,但我就是无法动手实践,由此感觉那些树都是说大话的假把式,无论描述的如何详细,但只要我无法动手实践,那么也只能是隔靴搔痒,心中困顿,始终无法排解,从本节开始,我们看原创 2016-12-22 17:04:48 · 1382 阅读 · 0 评论 -
突破BIOS无法连续读取软盘72扇区的限制
在很多虚拟去的实现中,在读取软盘是,不允许连续读取超过72个扇区,本文描述如何突破该限制,以便我们的操作系统内核大小超过72个扇区时,仍能够正常加载到内存中执行!原创 2016-11-26 11:44:14 · 1621 阅读 · 1 评论 -
操作系统内核管理模块的实现1-检测可用内存
操作系统的一大功能就是为运行程序分配资源,早期Dos系统时常死机或程序奔溃,一大原因就在于应用程序不能以有序合理的方式访问系统资源。在众多系统资源中,内存是系统内核必须小心处理的一块,内存分配算法,也是操作系统内核理论和开发上的重点和难点,从本节开始,我们看看内核如何有效的管理和控制内存。原创 2016-10-25 21:07:29 · 1702 阅读 · 5 评论 -
内存管理算法实现
在上一节,我们得知可用内存的大小后,我们就可以开发一个简单的管理算法去管理和分配可用用内存。原创 2016-11-03 21:08:45 · 3619 阅读 · 5 评论 -
让鼠标漫天飞舞:在内核中实现鼠标的中断处理
代码的调试和运行,以及更详细的讲解,请参看视频: Linux kernel Hacker, 从零构建自己的内核上一节,我们成功实现了键盘按键的中断响应,本节,我们看如何响应鼠标的中断信号,并做相应处理。原创 2016-10-11 16:24:16 · 3442 阅读 · 3 评论 -
C语言结合汇编开发系统内核
前几节,我们进入了保护模式,在保护模式下,除了寻址空间增大,运算能力增强外,还有一大好处就是能将C语言引入内核开发,因为C语言编译后的汇编代码,默认的运行环境就是保护模式,所以,只有进入保护模式,那么C语言才有可能介入到开发流程中,或许大家已经厌倦了汇编语言的晦涩,引入C语言,想必我们都能松口气。下面,我们先看看,汇编如何与C结合,实现相互间的函数调用。原创 2016-09-08 16:52:15 · 3872 阅读 · 6 评论 -
内核键盘中断处理进阶
上一节,我们实现了键盘中断的响应,但响应的处理比较简单,只是向界面打印一条字符串而已,本节,我们将在屏幕上输出键盘中断更多的相关信息。当键盘上的一个按键按下时,键盘会发送一个中断信号给CPU,与此同时,键盘会在指定端口(0x60) 输出一个数值,这个数值对应按键的扫描码(make code),当按键弹起时,键盘又给端口输出一个数值,这个数值叫断码(break code).原创 2016-10-09 20:55:37 · 6106 阅读 · 4 评论 -
利用C语言绘制操作系统图像界面
有了C语言这一利器后,不多多拿来用,那就太对不起前面的一系列努力了。那么怎么表现C语言的强大功能呢,如果还只是一味的在界面上输出几行字符,那太没意思,考虑到,我们的目标是做出像windows那样具备舒心的图像用户界面那样的系统,所以在这一节,我们由字符模式切换入画面模式,初步体验下,那些绚丽多彩的图像界面是如何发展而成的。原创 2016-09-13 11:39:04 · 29841 阅读 · 5 评论 -
保护模式超强的寻址功能:天空任鸟飞
X86架构下,cpu 的运行模式分两种,一种是实模式,像早期Dos那种黑底白字的命令行操作界面,可以说是实模式最好表现形式,在实模式下也只能产生这种冰冷,呆板,机械的用户体验。后来Intel的CPU进一步发展,引入了保护模式,由此,操作系统的发展进入了新的时代,在保护模式下,CPU功能进一步增强,进而支撑的起计算量繁重的图形用户界面,我们这才有了温暖,炫酷,友好的图形操作系统原创 2016-08-18 18:29:05 · 2135 阅读 · 3 评论 -
用java做操作系统内核:软盘读写
在前两节,我们将一段代码通过软盘加载到了系统内存中,并指示cpu执行加入到内存的代码,事实上,操作系统内核加载也是这么做的。只不过我们加载的代码,最大只能512 byte, 一个操作系统内核,少说也要几百兆,由此,系统内核不可能直接从软盘读入系统内存。通常的做法是,被加载进内存的512Byte程序,实际上是一个内核加载器,它运行起来后,通过读取磁盘,将存储在磁盘上的内核代码加载到指定的内存空间原创 2016-07-10 11:27:38 · 5973 阅读 · 14 评论 -
java开发操作系统内核:让内核突破512字节的限制
我们当前的系统内核,必须包含在虚拟软盘的第1扇区,由于一个扇区只有512字节,因此,系统内核的大小不可能超过512字节。但是,一个拥有完善功能的内核不可能只有512字节,因此要想越过512字节的限制,具体的做法就是做一个内核加载器,放入到第一扇区,加载器加载如内存后,再将内核从软盘加载到系统内存,然后,跳转到内核的加载地址。原创 2016-07-20 18:12:38 · 2713 阅读 · 3 评论 -
java开发操作系统内核:由实模式进入保护模式之32位寻址
从时模式到保护模式,是计算法技术跨时代的发展。大家想想笨拙的Dos界面,黑底白字的那种冷漠界面到win95各种色彩斑斓的窗口,两者之间的区别其实就是实模式和保护模式的天壤之别。保护模式中,最重要的一个概念莫过于”保护”二字,有了“保护”功能后,CPU为软件提供了很多的功能,当然也有了更多的限制。从本章开始,我们将以庖丁解牛的方式解析保护模式原创 2016-07-25 11:53:52 · 3328 阅读 · 11 评论 -
在系统内核中绘制鼠标指针
有了桌面背景,能够显示字符串,现在在图形界面上还少了点东西,那就是鼠标指针,如果有个鼠标能在桌面里动来动去,那系统就有点意思了。就像前几节说的那样,任何图像都是二维平面上点的集合,把不同位置的点设置成不同颜色,那么我们想要的图像就显示出来了原创 2016-09-30 17:08:57 · 2010 阅读 · 0 评论 -
为系统内核建立中断机制
本章代码有一定难度,请参看视频获得更详细的代码开发流程: Linux kernel Hacker, 从零构建自己的内核上一节,我们绘制了鼠标图案,遗憾的是,鼠标箭头是死的,动不了,要想让鼠标移动,我们需要为内核建立中断机制。当我们移动鼠标时,鼠标会给CPU发送信号,CPU接收到信号后,终止当前的运算,执行内核给定的代码以处理鼠标发送的信号,在这段代码中,内核根据鼠标发送过来的相关信息,重新绘制鼠标原创 2016-10-01 21:14:22 · 2355 阅读 · 1 评论 -
系统内核管理模块的实现2--解析内存状态信息
上一节,我们成功调用BIOS,获取内存信息,现在,我们可以显示和分析获得的相关信息,为下一步实现内存管理做准备。原创 2016-10-28 11:12:24 · 995 阅读 · 0 评论