操作系统
猫不在
这个作者很懒,什么都没留下…
展开
-
计算公式
CalcResult calcResult = new CalcResult(); for (int i = 0; i < comboCount; i++) { decimal critChance = 1-CalcRandom(calcMode); critRate = (decimal)Mathf.Clam...原创 2020-03-11 17:59:07 · 348 阅读 · 0 评论 -
遍历系统进程和对应模块以及创建进程
创建进程int main(int argc, char* argv[]){ //create process LPCTSTR lpApplicationName = "C:\\Program Files\\Internet Explorer\\IEXPLORE.exe"; PROCESS_INFORMATION lpProcessInformation; ZeroMemory(&am...原创 2020-03-02 16:52:30 · 199 阅读 · 0 评论 -
windows api
简介编码的历史sys32在C盘的WINDOWS目录下面有System32和SysWOW64两个文件夹,存放的是常用dll32里存放的是64位dll,64里面存放的是32位dll常用dll介绍kernel32.dll 最核心的功能模块,管理内存,进程和线程相关的函数User32.dll 是Windows用户界面相关应用程序接口,如创建窗口和发送消息等...原创 2020-02-27 20:39:51 · 304 阅读 · 0 评论 -
汇编语言实模式到保护模式的思考
改变32位引入了保护模式,保护模式实现的核心是描述符它可以存放在内存的任何位置,至于基地址和界限则存放在GDTR中所以他提供了很多种保护当我们跳转的时候,他会检查描述符是否存在,你是否有权限跳转到该段当你运行指令的时候,他会判断取指令的地址是否越过段界限【这里比较奇怪的是堆栈段的段界限计算方式】当计算机启动的时候,默认是在16位实模式下,当在32位模式下运行的时候,段描述符是...原创 2019-08-15 13:09:03 · 235 阅读 · 0 评论 -
x86汇编之任务切换
前言任务切换可以分为协同和抢占协同就是任务自己主动交出控制权,抢占就是利用中断,强制从任务手中获得控制权N位任务门和调用门类似,任务门描述符可以放置在GDT,LDT中当发生中断的时候,中断号x8+中断描述符表基地址,当CPU辨别这是一个任务门的时候就执行任务切换除此之外,还可以通过 call 任务门或者call TSS选择子进行任务切换矛盾在于用iret返回的时候,怎么鉴别是...原创 2019-08-24 11:00:06 · 594 阅读 · 0 评论 -
x86汇编语言基础
硬件知识处理器进行计算的原理,将数据传送给寄存器A和B,然后计算单元ALU计算出来传送给其他寄存器或者覆盖A或B为了访问内存,处理器需要给出一个地址,访问包括读和写,处理器还要指明,本次访问是读访问还是写访问,如果是写访问,则还要给出待写入的数据尽管内存的最小组成单位是字节,但是,经过精心的设计和安排,它能够按字节,字,双字和四字进行访问仅通过单次访问就能处理8位,16位,32位或者64...原创 2019-08-10 09:58:51 · 1045 阅读 · 0 评论 -
可重定位文件
为什么会有可重定位文件因为在某个进程每次运行的时候,操作系统分配给该进程代码和数据区域的起始地址是不确定的。而我们在脚本文件里面的跳转goto,函数调用,if语句,都是相对于该脚本起始地址为0来调用的所以就需要在把代码从磁盘加载到进程当中的时候,改变这些地址解决办法有两种解决思路1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重...原创 2019-08-07 22:14:21 · 402 阅读 · 0 评论 -
30天自制操作系统之叠加处理
前言我们通过往显存Vram里面直接设置像素的颜色来设置显示某个对象对于数字或者字母,我们将其显示放置在一个16*16的数组当中,然后将其遍历,显示在画面的某个位置static char cursor[16][16] = { "**************..", "*OOOOOOOOOOO*...", "*OOOOOOOOOO*....", "*OOOOOOOOO*......原创 2019-08-01 13:07:02 · 284 阅读 · 0 评论 -
30天自制操作系统 定时器
文章目录原理优化步骤多任务基础版本升级版本原理通过每隔一定的时间间隔向CPU发送中断,然后我们绑定了该中断所对应的计时函数,即每发生一次中断,该函数加1,并且判断所有的定时器,是否超过了该时间【超过了就需要执行该定时器的操作】,超过了就将定时器里面的数据放入FIFO里面,然后我们在主程序里面判断FIFO里面是否有数据,有数据就取出来,然后根据取出的数据来执行各种预先定义好的操作这个预...原创 2019-08-01 08:20:50 · 822 阅读 · 0 评论 -
寄存器和栈的关系
前言首先我们要知道,寄存器是距离CPU最近,存取速度很快的存储单元。而栈是内存里属于某个程序的一段连续空间程序内存包含 【对于这些程序内存是如何分配以及寻址的请看其他博客】程序的可执行机器代码操作系统需要的一些信息用来管理过程调用和返回的运行时栈用户分配的内存块寄存器作用——可以存储地址或整数数据【程序计数器】, 用来记录某些重要的程序状态【条件码寄存器】,其他用来保存临时数...原创 2019-07-31 19:27:28 · 5990 阅读 · 0 评论 -
引用对象和值对象
结论其实两者本质上都是值传递。首先,对于每一个程序而言,操作系统都会为他们开辟几段内存空间,这些内存空间分为几个部分,栈段,代码段,堆段对于栈段,程序中的值类型就存储在栈段中,而引用类型的数据则是存放在堆中,栈中存放的是该数据对象在堆中的内存地址所以当复制值类型的时候,两个变量就同时指向各自的值,各自改变也不会产生影响。当复制引用类型的时候,两个变量的存储都是同样的内存地址,当改变的时...原创 2019-07-31 16:28:06 · 1448 阅读 · 0 评论 -
段寄存器的琐碎知识
前言在30天自制操作系统中,了解到段寄存器这个概念,一开始觉得比较复杂【那是因为作者没有讲清楚】,后来在网络上查阅了一些资料才逐渐明白结果如下段在8086的时代,CPU寄存器是16位的,可是有20条地址线【1M的内存空间】,也就是16位没有办法表示所有的地址,所以出现了段这一个概念将1M的内存空间分成四个段,每个段的范围都小于 2162^{16}216——也就是0~216−12^{...原创 2019-08-02 23:35:25 · 1812 阅读 · 1 评论 -
A*算法个人理解
A*A*的核心在于F=G+H这个公式,他本身是一个距离评判公式,G是从起点到指定点的消耗,H是从指定点到终点的距离,这个距离忽略对角线,也忽略障碍物。我们首先将平面用网格划分,至于用正方形划分还是用正六边形划分,看情况。然后有两个集合OpenList与CloseList每个节点都有自己的GHP三个数据,可以建立一个结构体,这是一个递归的过程,将起点相邻的格子【忽略障碍物】放置到Op...原创 2019-07-25 15:50:21 · 306 阅读 · 0 评论 -
30天自制操作系统
基本概念Bios 是basic input output system 是基本的输入输出系统,为操作系统开发人员提供功能使用的,因此占用了一些内存区域。所以我们在使用内存的时候,某些区域是不可以使用的,以免发生冲突。系统本身需要有一个引导程序,来把自己搬运到内存当中所以内存里面前512字节是作为启动区的,在书籍当中,作者把程序的位置放置在“Ox8200-Ox83ff”的地方,理由是“Ox8...原创 2019-07-20 16:16:50 · 355 阅读 · 0 评论 -
深入理解计算机系统读书笔记
设备编号编号为0x0060的设备就是键盘io_cli 指令屏蔽中断我对于ctrl两个字节因为中断那里无法理解键盘自身就是IRQ1, 鼠标的IRQ12因为早期没有鼠标,所以要使用鼠标必须先将他进行激活键盘的控制电路和鼠标的控制电路是在一起的因为鼠标的控制电路其实运行起来缓慢,所以我们需要轮询,如果控制电路可以接收信息,就让CPU对其发送指令当激活鼠标的控制电路之后,再去激活鼠标,鼠...原创 2019-08-07 22:07:35 · 248 阅读 · 0 评论