操作系统-java
文章平均质量分 95
tyler_download
这个作者很懒,什么都没留下…
展开
-
java开发操作系统:一个程序向另一个程序伸出的咸猪手
一个恶意进程如何侵入用户进程的内存原创 2017-12-06 16:17:51 · 2939 阅读 · 0 评论 -
java开发系统内核:实现shift按键效果
前几节,我们花费不少精力在键盘响应的处理之上,到目前为止,我们的内核能够准确的将按键字符合理的显示在指定窗口上。但目前还有一些遗憾,就是当前内核对shift 键的按下不做反应。按理,当shift键按下后,再按数字键1,那么显示的字符应该是"!"而不是“1”,本节我们要处理的就是响应shift键的点击处理原创 2017-02-13 09:23:49 · 786 阅读 · 0 评论 -
内核开发:实现切换窗口后的键盘输入
我们实现了键盘的输入焦点切换,但尽管控制命令台激活后,如果我们敲击键盘,会发现字符输入的还是前头的Message box.这一节,我们要实现把键盘敲击的内容输入到被切换的窗口。原创 2017-01-30 10:45:00 · 816 阅读 · 0 评论 -
操作系统内核开发:使用Tab键进行窗口切换
我们使用操作系统的时候,一个必不可少的功能就是通过Tab间在不同的窗口中来回切换,这种便捷方式使得你不必要挪动鼠标去点击某个窗口,只要不停的按Tab键,直到你的目标窗口被激活为止,一旦窗口被Tab键激活后,对应的窗口会响应你在键盘的输入,我们本节的目的,是在系统中实现这个功能。原创 2017-01-26 09:59:46 · 779 阅读 · 0 评论 -
系统内核开发:实现命令控制台
操作系统有一个重要的应用,就是命令控制台,像Linux系统,命令控制台集合是使用系统的主要工具。本节,我们将为系统开发一个命令控制台,今后我们会为系统开发应用程序,并且不少程序将会通过控制台来运行。原创 2017-01-23 11:25:00 · 666 阅读 · 0 评论 -
系统内核开发:实现命令控制台
操作系统有一个重要的应用,就是命令控制台,像Linux系统,命令控制台集合是使用系统的主要工具。本节,我们将为系统开发一个命令控制台,今后我们会为系统开发应用程序,并且不少程序将会通过控制台来运行。原创 2017-01-23 11:24:47 · 689 阅读 · 0 评论 -
java开发操作系统:进程间的消息通讯
一个进程将信号发送给另一个进程,让对方及时采取某些动作。由于我们在设计时,为每个进程准备了一个接收信息的队列,因此进程间相互发送消息是,可以把消息放入到接收方的队列中,当接收方从队列中获取数据时,就能收到其他进程发送过来的信息,进而及时处理。原创 2017-03-01 10:34:49 · 2187 阅读 · 0 评论 -
java开发系统内核:实现进程优先级队列
我们把所有进程根据level分成三个队列,进程越重要,它对应的level值越低,这样,当进行进程调度时,进程调度器先查看level等于0的队列是否还有进程,有的话,只执行该队列的进程,如果该队列不止一个进程,那么每个进程根据他们的优先级获得相应的CPU时间原创 2017-01-19 11:06:25 · 689 阅读 · 1 评论 -
java开发系统内核:实现进程优先级
我们有了进程调度,目前来看,所有进程一律平等。我们的调度算法是遍历每一个进程,然后给每一个进程一定的运行时间,然后再切换下一个进程。但实际运用上,进程间不会是平等的,有些进程承担着比较重要的工作,因此,它有理由获得更多的运行时间,例如内核进程,一些进程不是很重要,同理,它就不应该占用过度的CPU资源。本节,我们要引入进程优先级的功能,让优先级高的进程获得更多的运行机会。原创 2017-01-13 10:17:34 · 998 阅读 · 0 评论 -
java开发系统内核:依靠多任务实现多窗口
为了让多任务的特性展示的更直观,本节,我们基于多任务的基础上,为系统实现多个窗口特效,每个窗口都运行于一个任务或进程。由于窗口基于各自不同的进程,因此窗口自身的变化更新不会影响到其他窗口。原创 2017-01-11 10:32:11 · 1130 阅读 · 1 评论 -
java开发系统内核:自动化进程切换
我们已经通过时钟中断完成了两个进程间的相互切换。但当前实现有很大的缺陷,例如我们只能在两个指定的进程间切换,如果要想增添新的进程,那么,没增加一个进程,按照当前模式,我们只能再增加相应代码,这显然是不可接受的。因此,这节,我们希望完成进程的切换机制,使得有新进程时,我们无需改动代码,进程的管理机制会自动把新进场添加进切换机制。原创 2016-12-30 10:51:47 · 1089 阅读 · 1 评论 -
java开发系统内核:实现进程自动切换,再现Linus当年辉煌一刻
Linus当时完成的内核有什么特点呢?当时的内核功能简单,但最重要的是其具有了进程调度功能,它启动了两个进程,一个进程打印出一串"AAAA...", 另一个进程打印出一串"BBBB...."既然我们现在的系统内核已经具备了进程的切换功能,因此,我们更近一步,将现在进程间的主动切换升级为进程间的自动切换,然后每个进程各种打印一个字符,这样就可以再现当时Linus的辉煌一刻了。原创 2016-12-28 16:38:48 · 1046 阅读 · 1 评论 -
java开发系统内核:实现回车键的处理
在为我们的系统开发应用程序前,还需要完成最后一点扫尾工作,那就是处理回车键。要启动应用程序,一种常用办法是,在命令行控制台中,键入要运行的程序名字,点击回车,然后系统把应用程序加载起来,因此,响应回车键按下消息是系统必不可少的功能。原创 2017-03-06 11:26:36 · 1092 阅读 · 0 评论 -
java开发系统内核:cls 屏幕清空命令的实现
上节,我们实现了控制台命令mem, 它能显示当前可用内存,本节我们实现另一常用命令叫cls, 该命令的作用是把控制台所以字符全部清空原创 2017-03-22 16:45:38 · 2212 阅读 · 0 评论 -
java开发系统内核:实现type命令读取文件内容
上一节,我们通过dir命令,能够列出存储在磁盘上的各个文件,当时我们只是把文件描述信息写入磁盘,但文件的内容并没有实际写入,本节,我们将在磁盘上写入文件的内容,同时实现type命令,通过type,我们可以把对应文件的内容在控制台上显示出来原创 2017-04-09 11:43:11 · 971 阅读 · 0 评论 -
java开发系统内核:使用LDT保护进程数据和代码
使用LDT局部描述符表保护进程代码和数据原创 2017-12-08 15:28:29 · 548 阅读 · 0 评论 -
java开发操作系统:不锁死控制台的加载用户进程
实现无需锁死控制台的用户进程加载原创 2017-11-14 16:06:48 · 374 阅读 · 0 评论 -
java开发操作系统:启动任意多控制台窗口
实现任意多个控制台窗口的创建和关闭原创 2017-10-13 16:45:11 · 1920 阅读 · 0 评论 -
java开发系统内核:实现鼠标与窗口的互操作
实现鼠标与窗体互动,让鼠标能拖拽窗体和关闭窗体原创 2017-09-05 15:49:00 · 1002 阅读 · 0 评论 -
java开发系统内核:键盘和窗口关闭API
为窗口程序添加键盘响应原创 2017-08-25 11:44:23 · 635 阅读 · 0 评论 -
java开发系统内核:防范缓冲区溢出和强杀死循环程序
本节我们给内核添加上缓冲区溢出的防范功能,以及通过中断强杀死循环进程原创 2017-07-29 16:54:41 · 840 阅读 · 0 评论 -
java开发系统内核:使用C语言开发系统应用程序
我们的操作系统通过增添内核接口导出机制后,已经可以作为平台,运行应用程序了,但目前应用程序的开发有一个不足就是,我们只能使用汇编语言开发应用程序,用汇编语言开发程序实在太累了,如果能使用C语言就好了,例如当我们想要开发一个在控制台上输出一个字符的应用程序,如果代码能用C语言这么写就好了原创 2017-06-15 12:00:43 · 1175 阅读 · 0 评论 -
java开发系统内核:让内核从严重错误中恢复
我们看看,当执行应用程序遇到严重错误时,内核如何从严重的错误中恢复回来继续运行。原创 2017-07-06 12:02:49 · 2393 阅读 · 1 评论 -
java开发系统内核:像Linux一样使用中断实现内核API
我们必须想出新的API提供办法。常用的做法是,仿照Linux 将API当做一个中断调用,由此应用程序在使用API时,只需要记住API对应的中断号,然后使用指令int 即可。原创 2017-05-31 10:58:43 · 665 阅读 · 0 评论 -
java开发系统内核:实现基于FAT12文件系统的dir命令
本节要实现的控制台命令是dir, 熟悉该命令的同学都了解,它的作用是列举出当前目录下的文件信息。问题在于,我们当前的操作系统根本没有硬盘,更没有文件系统,那么这个命令列举的文件从哪里来呢?由于我们的系统内核是存储在软盘上的,因此,我们直接把软盘当做系统硬盘,该命令列举的是存储在虚拟软盘上的文件原创 2017-03-31 16:44:19 · 3241 阅读 · 1 评论 -
java开发系统内核:第一个控制台命令
有一类程序叫命令行程序,此类程序没有花哨的窗口特效,他们的运行方法是,用户在黑色的命令行窗口中,输入程序的名字,后面跟着提交给程序的参数,点击回车,然后程序开始运行,然后把计算后的结果展示在命令行窗口里。早期的DOS,以及现在Linux系统的Shell, 都可以通过命令行来运行一系列程序,我们这一节的内容,就是实现一个命令行程序运行的功能原创 2017-03-14 16:31:36 · 793 阅读 · 1 评论 -
java开发系统内核:进程的挂起和恢复
有了进程的自动调度后,接下来的任务在于,如何将空闲进程挂起,空闲进程往往是那些没有具体任务需要处理的进程,因此,如果继续让其运行的话,那么必然会耗费宝贵的CPU资源,如果能让它先挂起,等到它需要执行具体任务时,再把它调度到前台,那才是一种合理的进程管理机制。原创 2017-01-05 10:11:47 · 1827 阅读 · 0 评论 -
java开发系统内核:进程切换
上一节,我们初步介绍了进程相关的具体概念,特别是讲解了进程切换相关的数据结构,也就是TSS,也实现了进程的自我切换,本节,我们看看如何从当前的进程切换到新进程,然后再切换回来,也就是:进程A -切换->进程B-切换->进程A.原创 2016-12-23 15:13:34 · 1291 阅读 · 0 评论 -
java开发系统内核:进程初体验及代码其实现1
操作系统内核开发,一个及其重要的模块是进程以及进程调度。在大学的操作系统课堂上,研究进程和相关调度算法,是一块耗时耗力的内容。市面上,讲解操作系统进程概念以及调度算法的内容可谓是汗牛充栋,记得我以前读相关内容时,看到很多算法流程图,伪码说明等等,说了一大堆,但我就是无法动手实践,由此感觉那些树都是说大话的假把式,无论描述的如何详细,但只要我无法动手实践,那么也只能是隔靴搔痒,心中困顿,始终无法排解,从本节开始,我们看原创 2016-12-22 17:04:48 · 1411 阅读 · 0 评论 -
操作系统内核管理模块的实现1-检测可用内存
操作系统的一大功能就是为运行程序分配资源,早期Dos系统时常死机或程序奔溃,一大原因就在于应用程序不能以有序合理的方式访问系统资源。在众多系统资源中,内存是系统内核必须小心处理的一块,内存分配算法,也是操作系统内核理论和开发上的重点和难点,从本节开始,我们看看内核如何有效的管理和控制内存。原创 2016-10-25 21:07:29 · 1708 阅读 · 5 评论 -
内存管理算法实现
在上一节,我们得知可用内存的大小后,我们就可以开发一个简单的管理算法去管理和分配可用用内存。原创 2016-11-03 21:08:45 · 3632 阅读 · 5 评论 -
让鼠标漫天飞舞:在内核中实现鼠标的中断处理
代码的调试和运行,以及更详细的讲解,请参看视频: Linux kernel Hacker, 从零构建自己的内核上一节,我们成功实现了键盘按键的中断响应,本节,我们看如何响应鼠标的中断信号,并做相应处理。原创 2016-10-11 16:24:16 · 3476 阅读 · 3 评论 -
C语言结合汇编开发系统内核
前几节,我们进入了保护模式,在保护模式下,除了寻址空间增大,运算能力增强外,还有一大好处就是能将C语言引入内核开发,因为C语言编译后的汇编代码,默认的运行环境就是保护模式,所以,只有进入保护模式,那么C语言才有可能介入到开发流程中,或许大家已经厌倦了汇编语言的晦涩,引入C语言,想必我们都能松口气。下面,我们先看看,汇编如何与C结合,实现相互间的函数调用。原创 2016-09-08 16:52:15 · 3888 阅读 · 6 评论 -
使用调色板绘制系统界面
上一节,我们已经可以使用C语言实现图像绘制,但操作系统的用户界面不可能是那种扎眼的条纹图案,这一节,我们要改进图形绘制的方法,做一个像某像样的系统界面。本节,我们看看如何利用调色板机制绘制更加好看的系统界面原创 2016-09-17 18:03:19 · 5619 阅读 · 7 评论 -
利用C语言绘制操作系统图像界面
有了C语言这一利器后,不多多拿来用,那就太对不起前面的一系列努力了。那么怎么表现C语言的强大功能呢,如果还只是一味的在界面上输出几行字符,那太没意思,考虑到,我们的目标是做出像windows那样具备舒心的图像用户界面那样的系统,所以在这一节,我们由字符模式切换入画面模式,初步体验下,那些绚丽多彩的图像界面是如何发展而成的。原创 2016-09-13 11:39:04 · 29919 阅读 · 5 评论 -
保护模式超强的寻址功能:天空任鸟飞
X86架构下,cpu 的运行模式分两种,一种是实模式,像早期Dos那种黑底白字的命令行操作界面,可以说是实模式最好表现形式,在实模式下也只能产生这种冰冷,呆板,机械的用户体验。后来Intel的CPU进一步发展,引入了保护模式,由此,操作系统的发展进入了新的时代,在保护模式下,CPU功能进一步增强,进而支撑的起计算量繁重的图形用户界面,我们这才有了温暖,炫酷,友好的图形操作系统原创 2016-08-18 18:29:05 · 2147 阅读 · 3 评论 -
用java做操作系统内核:软盘读写
在前两节,我们将一段代码通过软盘加载到了系统内存中,并指示cpu执行加入到内存的代码,事实上,操作系统内核加载也是这么做的。只不过我们加载的代码,最大只能512 byte, 一个操作系统内核,少说也要几百兆,由此,系统内核不可能直接从软盘读入系统内存。通常的做法是,被加载进内存的512Byte程序,实际上是一个内核加载器,它运行起来后,通过读取磁盘,将存储在磁盘上的内核代码加载到指定的内存空间原创 2016-07-10 11:27:38 · 5982 阅读 · 14 评论 -
java开发操作系统内核:让内核突破512字节的限制
我们当前的系统内核,必须包含在虚拟软盘的第1扇区,由于一个扇区只有512字节,因此,系统内核的大小不可能超过512字节。但是,一个拥有完善功能的内核不可能只有512字节,因此要想越过512字节的限制,具体的做法就是做一个内核加载器,放入到第一扇区,加载器加载如内存后,再将内核从软盘加载到系统内存,然后,跳转到内核的加载地址。原创 2016-07-20 18:12:38 · 2727 阅读 · 3 评论 -
用java做一个最小的操作系统内核
用java来做操作系统内核,太搞笑了吧。如果你这么想,同时嘴上发出呵呵一笑。那么我这篇文章的目的也算达到了,评判一篇文章好坏,不就在于它是否能让读者感觉到精神的愉悦吗。如果你笑了,那表明我写了一篇好文章。呵呵!操作系统,是计算机科学中的皇冠,它作为一个平台,几乎集结了计算机科学里面的所有知识,如硬件,算法,架构,能够写出一个操作系统的人,无一不是行业里的翘楚或大神级人物原创 2016-06-21 18:32:37 · 13557 阅读 · 6 评论 -
java开发操作系统内核:由实模式进入保护模式之32位寻址
从时模式到保护模式,是计算法技术跨时代的发展。大家想想笨拙的Dos界面,黑底白字的那种冷漠界面到win95各种色彩斑斓的窗口,两者之间的区别其实就是实模式和保护模式的天壤之别。保护模式中,最重要的一个概念莫过于”保护”二字,有了“保护”功能后,CPU为软件提供了很多的功能,当然也有了更多的限制。从本章开始,我们将以庖丁解牛的方式解析保护模式原创 2016-07-25 11:53:52 · 3338 阅读 · 11 评论