os 004 中断
os 004 中断中断分类外部中断外部中断是来自CPU外部的中断,外部中断源又必须是硬件,所以外部中断又称为硬件中断。
可屏蔽中断通过intr引脚进入CPU,可屏蔽中断可以通过EFLAGS的IF位屏蔽掉。
不可屏蔽中断通过NMI引脚进入CPU,不可屏蔽中断不可以通过EFLAGS的IF位屏蔽掉。
内部中断内部中断可分为软中断和异常。
软中断由软件主动发起的中断。不受IF位影响。
异常异常分为以下三种:
FAULT 故障,比如缺页异常。
TRAP 陷阱
ABORT 终止
IF位只能屏蔽外部设备的中断。
指令
IF
作用
cli
IF=0
关中断
sti
IF=1
开中断
中断描述符表 IDT中断描述符表是保护模式下用于存储中断处理程序入口的表,当CPU接受一个中断时,使用中断向量在这个表中检索相应的中断描述符,继而找到中断处理程序的入口地址,执行中断处理程序。
中断描述符表中可以存储中断描述符、任务们描述符、陷阱们描述符。所以中断描述符又称为门 ...
nasm 使用
nasm 使用基本命令
汇编一个文件
nasm -f [-o ]nasm -f elf my.asm # 把文件’my.asm’汇编成’ELF’格式 的文件’my.o’.nasm -f bin my.asm -o my.bin # 把文件’my.asm’汇编成纯二进制格式的文件’my.bin’。nasm -I include/ my.asm -o my.bin #添加库目录
os 003 protected mode
protected mode保护模式简介实模式的缺陷
实模式下操作系统与用户程序属于听一个特权级,容易引起系统崩溃。
程序引用的地址指向真实的物理地址,即逻辑地址等于物理地址,不利于内存分片管理,容易造成内存碎片化。
用户程序可以随意访问任意内存。
一个短只能访问64KB地址,太小了,操作不方便。
一次只能运行一个程序。
只有20根地址线,只能寻址1M的空间,太小啦。
为了克服实模式低劣的内存管理方式,开发出了保护模式。
保护模式的特点
寄存器扩展。
寻址空间扩展为4GB。
对内存分段并进行描述。全局描述符表,全局描述符表寄存器,段描述符缓冲寄存器。
进入保护模式进入保护模式的步骤为:
打开A20
加载gdt
将cr0的pe位置1
jmp 刷新流水线
12345678910111213;----------------- 打开A20 ----------------in al,0x92or al,0000_0010Bout 0x92,al;----------------- 加载GDT ----------------lgdt [gdt_pt ...
gcc 使用入门
gcc 使用入门GCC是GUN Compiler Collection 的简称,除了编译程序之外,还包含其他的相关工具。
程序的编译过程对于GUN编译器来说,程序的编译要经过预处理、编译、汇编、连接四个阶段。
预处理输入c语言源文件 *.c ,输出中间文件 *.i ,该阶段主要处理源文件中的预处理指令
1gcc -E test.c -o test.i
编译阶段输入中间文件 *.i ,输出汇编语言文件 *.s 。
1gcc -S test.i -o test.s
汇编阶段输入汇编语言源 *.s ,输出机器语言文件 *.o 。
1gcc -c test.s -o test.o
连接阶段讲输入的机器代码文件 *.o 与其他的机器代码文件和库文件汇集成一个可执行的二进制代码文件。
1gcc test.o -o test
常用命令编译选项无选项编译链接用法:gcc test.c作用:将 test.c 预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为 a.out。
选项 -o用法:gcc test.c -o test作用:将 test.c 预处理、汇编、编译并链接形成 ...
os 002 os start
os 002 os start实模式下的1M内存布局
起始
结束
大小
用途
FFFF0
FFFFF
16B
BIOS入口地址,此16字节的指令是jmp f000:e05b
F0000
FFFEF
64KB-16B
BIOS的范围是F0000~FFFFF共640KB
C8000
EFFFF
160KB
映射硬件适配器的ROM或者内存映射式IO
C0000
C7FFF
32KB
显示适配器BIOS
B8000
BFFFF
32KB
用于文本模式的显示适配器
B0000
B7FFF
32KB
用于黑白显示适配器
A0000
AFFFF
64KB
用于彩色显示适配器
9FC00
9FFFF
1KB
扩展BIOS数据区
7E00
9FBFF
608KB
可用区域
7C00
7DFF
512B
MBR被加载到此处,共512字节
500
7BFF
30KB
可用区域
400
4FF
256B
BIOS数据区
0
3FF
1KB
中断向量表IVT
计算机的启动过程
按下开机键,cs:ip被初始化为F000:FFF0,指向BIOS入口地址。 ...
os 001 bochs
make an os -001
积攒了这么久,终于要开始写一个操作系统了,加油。
bochs1wget https://cfhcable.dl.sourceforge.net/project/bochs/bochs/2.6.2/bochs-2.6.2.tar.gz
解压进入目录中
configure
./configure –prefix=/lib/bochs –enable-debugger –enable-disasm –enable-iodebug –enable-x86-debugger –with-x –with-x11
makemake会出现lpthread未链接的信息,则添加以下内容。修改Makefile 在93行加入以下信息
./configure –prefix=/lib/bochs –enable-debugger –enable-disasm –enable-iodebug –enable-x86-debugger –with-x –with-x11191行与192行改为
$(LIBS) \
-lpthread
mak ...
shell 编程
shell 编程
最近在用Linux倒腾一些东西,发现好多东西都可以使用写成一个shell脚本来简化,所以学习一下shell.
示例12#! /bin/bashecho "hello,world!"
shell 变量 12345678910111213//注意不能加空格myname="cuiwenyao"echo ${myname}hername="qinmengyao"echo ${myname} "love" ${hername}//字符串拼接string="${myname} "love" ${hername}"echo string//获取长度echo ${#myname}//提取字串string=${myname:1:2}echo string
数组
bash 只支持一维数组。
shell用小括号表示数组,数组元素用 ...
use nginx on ubuntu 18.04
nginx on ubuntu 18.04reference
How To Install Nginx on Ubuntu 18.04
nginx beginner’s guideintroduction
nginx is one of the most popular web servers in the world and is responsible for hosting some of the largest and high-traffic sites on the internet. it is more resource-friendly than apache in most cases and can be used as a web server or reverse proxy.
in this guild, we will discuss how to install nginx on my ubuntu 18.04 server.step1 (install nginx)
because nginx is available in ubuntu’s de ...
linux command
linux commandlinux基础命令
参考
命令帮助1234567whatis commandinfo command man commandcommand --helpwhich command #查看命令二进制文件所在位置whereis command #查看程序使用的位置
文件及目录管理1234567891011121314151617touch [filename]mkdir [dirname]mkdir -p [dirname]cp [sourcefile] [desfile]cp -r [sourcedir] [destdir]cd pwdlsls -lrt #按时间,以列表的形式显示cat -n #显示行号,显示文本chown #改变拥有者chmod chmod -R #递归作用于整个文件夹ln #硬链接 深复制ln -s #软链接 浅复制:> [filename] #清空文件file [failename] #查看文件类型
文本处理12345#grep -n显示行号 -v反选 -i忽略大小写grep [选项][文件名]
磁盘管理12345678910 ...
Initial Server Setup with Ubuntu
Initial Server Setup with Ubuntu
When you first create a new ubuntu 18.04 server, there are a new configuration steps that you should take early on as part of the basic setup. This will increase the security and usability of your server and will give you a solid foundation for subsequent actions.
This guide below demonstrates how to manually complete the steps recommended for new ubuntu 18.04 servers. Following this procedure manually can be useful to learn some basic system administration skill ...
code-server
code-server
code-server is a cloud ide platform, which can enable us to code through browser anywhere. But how to set up the code-server on ubuntu 18.04
Eeee, to practice my English, I prefer to using English in my blog, unless there is something I can’t express by using my poor English.Introduction
1234567891011121314151617mkdir ~/code-servercd ~/code-serverproxychains wget https://github.com/cdr/code-server/releases/download/v3.10.1/code-server-3.10.1-linux-amd64.tar.gztar -xzvf code-server-3 ...
零碎的技术
零碎的技术域名解析
记录类型:A记录:将域名指向一个IPv4地址(例如:10.10.10.10),需要增加A记录CNAME记录:如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录主机记录:www :将域名解析为www.example.com,填写www;@ :将域名解析为example.com(不带www),填写@或者不填写;