- 博客(36)
- 收藏
- 关注
原创 使用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 -- Boot篇
自己动手做一个CS,是一件有趣的事情。在编写的过程中,能够学习知识,增长见识。看到自己编写的系统在虚拟机上成功的运行起来,也是一件让人愉悦的事情。本篇为CS的Boot编,负责启动图形模式、32位保护模式、页式内存管理,并将系统代码加载到内存中运行。
2016-06-03 17:02:06 935
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人