自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 纯x86汇编实现的多线程操作系统实践 - 写在最后

纯x86汇编 操作系统实践

2023-02-26 17:47:34 309 1

原创 纯x86汇编实现的多线程操作系统实践 - 第七章 AP2的用户进程

纯x86汇编 操作系统实践

2023-02-26 16:34:07 244

原创 纯x86汇编实现的多线程操作系统实践 - 第六章 AP1的用户进程

纯x86汇编 操作系统实践

2023-02-26 16:27:59 209

原创 纯x86汇编实现的多线程操作系统实践 - 第五章 AP的守护执行

纯x86汇编 操作系统实践

2023-02-26 16:20:16 262

原创 纯x86汇编实现的多线程操作系统实践 - 第四章 AP的初始化

纯x86汇编 操作系统实践

2023-02-26 16:07:15 194

原创 纯x86汇编实现的多线程操作系统实践 - 第三章 BSP的守护执行

纯x86汇编 操作系统实践

2023-02-26 15:58:10 706 1

原创 纯x86汇编实现的多线程操作系统实践 - 第二章 BSP的启动

纯x86汇编 操作系统实践

2023-02-26 15:13:26 605

原创 纯x86汇编实现的多线程操作系统实践 - 第一章 系统整体结构说明

纯x86汇编 操作系统实践

2023-02-26 15:09:35 438

原创 使用x86汇编编写一个多线程、多任务系统 (七)

最后,就是在AP1和AP2商各自运行的两个用户进程了。这两个用户进程的功能极度简单,就是调用BSP安装的0x80号系统调用,在指定的位置显示指定的字符而已:task1.asm的代码:;===============================================================================;=== 本程序为用户程序,在屏幕右下角快速闪烁不同颜色的矩形块 ===;======================

2021-03-27 21:34:35 557

原创 使用x86汇编编写一个多线程、多任务系统 (六)

ap_32.asm是两个AP在32位保护模式下执行的主要代码,其执行顺序如下: 序号 功能 1 使能中断功能: 竞争获取信号量 使能AP的IO APIC功能 设置IO APIC的ID(不同AP需要不同的ID号) 屏蔽 LINT0 打开SVR寄存器的APIC enable位(第8位),使能APIC功能。这里要注意:该位在BSP中是自动使能的,而在AP中是默认关闭的 安装0x31号和0x32

2021-03-27 20:22:48 568

原创 使用x86汇编编写一个多线程、多任务系统 (五)

ap_16.asm是AP1和AP2刚启动时执行的代码,它的作用同运行于BSP的mbr.asm一样,使AP1和AP2进入32位保护模式和页管理模式,再跳转到地址为0x80200000的ap_32.asm代码继续执行。其中,ap_32.asm为AP1、AP2执行的32位的主体代码,会完成使能中断、安装系统进程、安装用户进程的工作。ap_16.asm执行的顺序为: 序号 功能 1 屏蔽NMI中断 2

2021-03-26 20:19:18 306

原创 使用x86汇编编写一个多线程、多任务系统 (四)

core.asm代码是BSP的主体运行代码,其主要的执行顺序和功能如下: 序号 功能 1 使能中断: 使能IO APIC功能,设置BSP线程的IO APIC ID为0x0F 通过IO APIC设置键盘中断 通过IO APIC设置HPET0中断 屏蔽LINT0,避免IO APIC和8259之间的干扰 设置IPI的中断服务函数 设置键盘的中断服务函数 设置HPET0的中断服务函数

2021-03-25 20:25:23 674

原创 使用x86汇编编写一个多线程、多任务系统 (三)

mbr.asm为BSP线程启动时的执行代码,从0x00007c00处开始执行。该代码实现BSP线程从16位向32位保护模式的转变,并进入页管理模式,最后跳转到0x80100000开始执行。而0x80100000处放置的是core.asm的代码。core.asm的可执行代码被保存在磁盘的1号扇区处,大小为3个扇区。ap_16.asm的可执行代码被保存在磁盘的50号扇区处,大小为1个扇区。具体的代码如下:;--------------------------------------------

2021-03-24 23:30:44 573

原创 使用x86汇编编写一个多线程、多任务系统 (二)

该系统的代码包括5个asm文件和一个inc文件:其中: 序号 文件 功能 1 mbr.asm BSP的启动代码,从地址0x00007c00处开始执行。该代码保存在磁盘的0扇区。该代码将: 启动BSP的32位保护模式; 启动BSP的页管理模式; 将BSP后续的执行代码从磁盘的1~3扇区拷贝到地址0x80100000处; 跳转到0x80100000处开始执

2021-03-23 21:31:30 309

原创 使用x86汇编编写一个多线程、多任务系统 (一)

现代CPU都是多核多线程的,使用汇编语言编写一个支持多线程的多任务系统就是本次的工作。先看一下该系统的运行成果截图:该多人任务系统运行在 VirtualBox6.1.16 上,一共使用了3个线程,一个BSP和两个AP。1. BSP开启了键盘和HPET中断,安装了0x80号系统调用,并以100ms的间隔向AP1和AP2发送IPI消息。BSP在界面上不断打印成功启动后的秒数,并显示键盘输入的字符。2. 两个AP各自启动了系统进程和用户进程: 1)AP1和AP2的系统进程不断获取R...

2021-03-22 22:11:22 1655

原创 系统的简单注解 - 17 用户进程2的代码

该进程在屏幕右下角快速闪烁不同颜色的矩形块。颜色的切换时间为100毫秒。;===============================================================================;=== 本程序为用户程序,在屏幕右下角快速闪烁不同颜色的矩形块

2017-04-21 14:46:52 309

原创 系统的简单注解 - 16 用户进程1的代码

该用户进程在屏幕的左角边绘制一个树林春、夏、秋、冬的景色。每一幅图片相隔2秒显示。各图片的数据保存在_spring、_summer、_autumn和_winter四个数组中。;===============================================================================;=== 本程序为用户程序,在屏幕左边绘制一个树林

2017-04-21 14:42:17 263

原创 系统的简单注解 - 15 键盘扫描码汇总

扫描码键0x011b ESC0x3b00 F10x3c00 F20x3d00 F30x3e00 F40x3f00 F50x4000 F60x4100 F70x4200 F80x4300 F90x4400 F10主键盘区:0x2960 ~0x0231 10x0332 20x0433 30x0534 40x06

2017-04-21 14:38:06 832

原创 系统的简单注解 - 14 字符点阵汇总

//按照ASCII编码顺序const struct str1 ASCII[] PROGMEM ={{'',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// space 0x20{'!',0x00,0x00,0x18,0x3

2017-04-21 14:36:16 446

原创 系统的简单注解 - 13 10_keyboard.asm文件

该文件处理键盘的中断和输入。rtm_0x21_interrupt_handle:键盘中断处理过程,对用中断向量号0x21;install_0x21_interrupt:安装0x21号中断(键盘);keyboard_input:将键盘输入的字符放入缓冲区;keyboard_output:从键盘缓冲区获得一个字符;keyboard_char

2017-04-21 14:34:32 264

原创 系统的简单注解 - 12 09_font.asm

该文件用于在屏幕上显示字符。disp_letter_font:显示字符;数组font_0_buf到font_cnsl_buf,为各字符的点阵;数字font_letter_mem用于记录各字符点阵的起始地址;;==============================================================

2017-04-21 14:30:19 196

原创 系统的简单注解 - 11 08_bs16.asm文件

该文件用于播放一段wav文件。file_copy:将音乐文件拷贝到内存中。音乐文件被保存在硬盘逻辑扇区300的地方,长度为64K;play_sound:播放该音乐文件;install_0x25_interrupt:安装0x25号中断(DMA);rtm_0x25_interrupt_handle:DMA中断处理过程;write_dsp:向

2017-04-21 14:25:26 242

原创 系统的简单注解 - 10 07_external_interface.asm文件

该文件提供了多个用于系统调用的接口。用户进程通过这些接口使用操作系统提供的核心功能。install_all_external_handle:安装用户层可调用的外部接口;draw_point:画点;draw_rectangle_0:画矩形;get_cmd:获取来自系统的命令;task_close:关闭用户进程,回到系统进程;tas

2017-04-21 12:56:13 228

原创 系统的简单注解 - 9 06_color.asm文件

该文件用于设置调色板,并绘制相应的图形。Set_color_palette:设置前16个调色板的值(整个系统仅用16个颜色);draw_line:画横线;draw_long_string:画竖线;draw_rectangle:画矩形;;=================================================

2017-04-21 12:48:53 242

原创 系统的简单注解 - 8 05_memory.asm文件

该文件用于分配和释放系统、用户页。系统和用户页分开管理,并通过bit来记录每一页的分配状态,0为未分配,1为一分配。其中,系统可用内存从132K到640K之中分配(虚拟地址);用户可分页内存硬件地址,从1M开始(硬件地址)。Alloc_sys_page:分配一页系统内存;Alloc_usr_page:分配一页用户内存;find_a_nu

2017-04-21 11:51:05 226

原创 系统的简单注解 - 7 04_process.asm文件

该文件包括了系统进程的创建、用户进程的安装、进程控制块链表的控制(运行链表、休眠链表)、进程窗口的绘制、硬盘扇区的读取。Set_TSS_sel:安装TSS段;Set_LDT_sel:安装LDT段;Load_core_task:创建系统进程(权限0);Load_usr_task:创建用户进程(权限3);mount_task_running

2017-04-21 11:35:50 378

原创 系统的简单注解 - 6 03_timer.asm文件

该文件包括了时钟中断的主要功能。rtm_0x20_interrupt_handle:实时时钟中断处理过程;install_0x20_interrupt:安装0x20号中断(实时时钟);sys_clock:计算并显示系统时间(秒);sys_get_seconds:获取系统已经走过的秒数;;============================

2017-04-21 10:58:07 227

原创 系统的简单注解 - 5 02_mouse.asm文件

该文件用于初始化鼠标中断、处理鼠标事件、在屏幕上绘制鼠标。首先,我们来看看鼠标的控制方法。以下文字摘自哈尔滨工业大学的谢煜波:根据PS/2协议,鼠标是由键盘的控制器(i8042)进行控制的,键盘控制器(i8042)总共有两个通道,一个通道由键盘使用,另一个通道由鼠标使用,我们对鼠标进行操作也是通过i8042芯片来完成的,因此,现在的重点就是了解并熟悉怎样对i8

2017-04-21 10:52:39 329

原创 系统的简单注解 - 4 01_interrupt.asm文件

01_interrupt.asm文件提供了X86中断处理的初始化代码,同时还提供了一个接口供不同硬件安装自己的中断处理程序。interrupt_init:初始化X86中断,最后启动中断功能;general_interrupt_handler:通用的中断处理过程;general_exception_handler:通用的异常处理过程install

2017-04-21 10:33:06 246

原创 系统的简单注解 - 3 00_header.asm文件

00_header.asm文件用于保存代码中使用的一些常量。其中,“struc proc_ctrl”结构体为进程控制块,用于保存系统/用户进程的核心信息。该结构体在“04_process.asm”文件中被广泛使用。;==============================================================================

2017-04-21 10:27:04 469

原创 系统的简单注解 - 2 core.asm文件

;===============================================================================;=== 本程序为系统Core程序,其主要功能有: ==

2017-04-01 17:40:14 308

原创 系统的简单注解 - 1 代码结构

最初的代码是由四个.asm文件组成:mbr.asm、core.asm、task.asm、task1.asm。其中,mbr.asm是引导代码,写在硬盘的第一个扇区。core.asm是系统的执行代码,放在系统地址0xc0010000处开始运行,优先级为0。task.asm和task1.asm是用户进行代码,都从用户空间地址0开始执行,优先级为3。后期为了编辑和优化方便,将core.asm代码进

2017-04-01 17:37:42 440

原创 为啥要写一个操作系统

   终于完成了年轻时定下的一个小目标:独立完成一个操作系统。虽然该系统仅仅是实验目的的,功能并非完善,但是心情还是暗爽的。   从2014年接触《x86汇编语言-从实模式到保护模式》,到现在完成开发,经过了2年的时间。2年来,编写工作因为各种原因断断续续。但每当想起也许一生都无法完成当年对自己的承诺时,挫败感扑面而来。是一股不甘的情绪鞭策着自己一点点的挤出时间,一步步的完成系统的

2017-04-01 17:33:38 423

原创 一个用x86汇编编写的、页式管理、图形化的CS -- App篇

本篇为APP篇,介绍使用x86汇编编写的用户进程。由于APP的结构非标准,只能同前两篇中的代码一同使用。

2016-06-08 08:34:42 1026

原创 一个用x86汇编编写的、页式管理、图形化的CS -- Core篇

本篇将介绍CS的核心部分代码的功能

2016-06-07 11:24:56 757

原创 一个用x86汇编编写的、页式管理、图形化的CS -- Boot篇

自己动手做一个CS,是一件有趣的事情。在编写的过程中,能够学习知识,增长见识。看到自己编写的系统在虚拟机上成功的运行起来,也是一件让人愉悦的事情。本篇为CS的Boot编,负责启动图形模式、32位保护模式、页式内存管理,并将系统代码加载到内存中运行。

2016-06-03 17:02:06 935

《纯x86汇编实现的多线程操作系统实践》全书,包含最终效果和全部源代码

《纯x86汇编实现的多线程操作系统实践》全书,包含最终效果和全部源代码

2023-02-26

纯x86汇编实现的多线程操作系统实践 源代码头文件

纯x86汇编实现的多线程操作系统实践 源代码头文件

2023-02-26

纯x86汇编实现的多线程操作系统实践 第七章 源代码

纯x86汇编实现的多线程操作系统实践 第七章 源代码

2023-02-26

纯x86汇编实现的多线程操作系统实践 第六章 源代码

纯x86汇编实现的多线程操作系统实践 第六章 源代码

2023-02-26

纯x86汇编实现的多线程操作系统实践 第五章 源代码

纯x86汇编实现的多线程操作系统实践 第五章 源代码

2023-02-26

纯x86汇编实现的多线程操作系统实践 第四章 源代码

纯x86汇编实现的多线程操作系统实践 第四章 源代码

2023-02-26

纯x86汇编实现的多线程操作系统实践 第三章 源代码

纯x86汇编实现的多线程操作系统实践 第三章 源代码

2023-02-26

纯x86汇编实现的多线程操作系统实践 第二章 源代码

纯x86汇编实现的多线程操作系统实践 第二章 源代码

2023-02-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除