马如林
桂林电子科技大学计算机硕士,15年+的编程和架构经验,美国PMI认证PMP,Oracle认证Java程序员,信息系统项目管理师,软件设计师,CET6。
展开
-
添不花钱学计算机及编程(预备篇)— 操作系统
点击打开链接什么是操作系统?没有软件,计算机只是一堆发热的电子元件。如果说硬件是计算机的心脏,则软件就是它的灵魂。操作系统是允许用户运行应用程序的一组系统程序。操作系统将系统的硬件抽象,呈现在用户和应用程序之前的是一个虚拟的机器。是软件造就了计算机系统的特点。 大多数PC可以运行一到多个操作系统,而每一个操作系统从外观和感觉上都大不相同。Linux由不同功能的部原创 2016-07-04 12:44:08 · 1364 阅读 · 0 评论 -
操作系统学习笔记(33)--文件系统
初始化文件系统并装载文件系统根据启动时的根目录和文件结构进行初始化操作。原创 2010-06-02 07:20:00 · 1018 阅读 · 1 评论 -
操作系统学习笔记(32)--初始化IDE
对IDE进行初始化操作原创 2010-06-02 07:19:00 · 1160 阅读 · 0 评论 -
操作系统学习笔记(31)--初始化键盘
键盘处理也是中断响应。键盘有键盘映射码和特殊键处理。基本思想还是中断和进程调度执行和输入输出及缓冲区的关系。原创 2010-06-01 22:33:00 · 1168 阅读 · 0 评论 -
操作系统学习笔记(28)--初始化进程调度
内核进程原创 2010-06-01 22:28:00 · 1021 阅读 · 0 评论 -
操作系统学习笔记(24)--内存页面设置
有了内存大小和粒度设置可以获得页数量原创 2010-05-31 20:01:00 · 945 阅读 · 0 评论 -
操作系统学习笔记(23)--系统内存获取
设置内存,首先需要获取内存大小。 ; Use int 15h to find out size of extended memory in KB. ; Extended memory is the memory above 1MB. So by ; adding 1MB to this amount, we get the total amount ; of syst原创 2010-05-30 20:44:00 · 742 阅读 · 0 评论 -
操作系统学习笔记(20)--开中断、关中断及原子操作
操作系统在很多情况下,需要进行原子操作,此时是不可以进行中断响应的。根据需要此时需要关闭中断,在原子操作完了之后再进行开中断。 中断相关的操作有:1 知道EFFLAG的中断位2 中断开、关的指令3 如果进行C语言设置时的参数传递 下面给出部分伪码: 原子操作() { 开始原子操作(); 操作; 结束原子操作();}原创 2010-05-30 12:13:00 · 12523 阅读 · 0 评论 -
操作系统学习笔记(19)--贴一个内存设置的代码
void* memset(void* s, int c, size_t n){ unsigned char* p = (unsigned char*) s; while (n > 0) { *p++ = (unsigned char) c; --n; } return s;}原创 2010-05-29 22:35:00 · 833 阅读 · 0 评论 -
操作系统学习笔记(22)--全局描述符表
在保护模式下访问内存步骤:1 获取段选择子2 根据GDTR寄存器获得基地址3 和偏移地址结合获得线性地址 与内存有关的描述符 align 8, db 0 (内存对齐) GDT: ; Descriptor 0 is not used dw 0 dw 0 dw 0 dw 0 ; Descriptor 1: kernel code segment原创 2010-05-30 18:08:00 · 1305 阅读 · 0 评论 -
操作系统学习笔记(21)--中断描述符表设置
与此相关的IDTR 基本定义IDT_Pointer: dw 0 -- 表长 dd 00 -- 基地址 lidt [IDT_Pointer] 基地址和表长 IDT_Pointer是6个字节长,高4个字节是32 Bit Linear Base Address,低2个字节是16 Bit Table Limit原创 2010-05-30 17:22:00 · 978 阅读 · 0 评论 -
操作系统学习笔记(18)--bss段设置
bss段需要填充为0 #include "stdio.h"extern char __bss_start, end;int main() {printf("bss start %x /n", &__bss_start);printf("bss end %x /n", &end);printf("bss start %x /n", __bss_star原创 2010-05-29 21:50:00 · 1830 阅读 · 1 评论 -
推荐一个网页
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/原创 2010-05-29 18:15:00 · 913 阅读 · 0 评论 -
操作系统学习笔记(34)--内存分页
内存分页使用CR寄存器的标志位设置获取内存物理地址步骤如下:原创 2010-06-02 22:21:00 · 950 阅读 · 0 评论 -
操作系统学习笔记(25)--内核堆设置
1 设置内核堆开始位置2 设置堆大小填充内存原创 2010-06-01 20:57:00 · 754 阅读 · 0 评论 -
操作系统学习笔记(42)--感悟
<br />学了一段时间的操作系统源代码,自己写些感受。<br /> <br />操作系统不是想象的那样深不可测,按照系统的启动过程是可以理解的。所以有时候有人认为Linus不是像你想象的那样伟大是有道理的,感觉Stallman,Kernighan、Ritchie、Gosling等比他NB点。<br /> <br />操作系统是按照CPU的指令执行的,我们写操作系统是对计算机体系结构和指令结构按照图灵机的理论进行运行。<br /> <br />怎样将运算结果进行存储和进程调度是操作系统的2个核心问题。其它的原创 2010-06-08 20:59:00 · 3583 阅读 · 6 评论 -
操作系统学习笔记(41)--系统学习大纲
参考文献Linux.Kernel.Development.2nd.Edition. Robert LoveUnderstanding.The.Linux.Kernel Daniel P. Bovet & Marco Cesati汇编语言 王爽80X86汇编语言程序设计教程 杨季文C程序设计语言 Kernigham & Ritchie操作系统设计与实现 Andrew S. Tanenbaum & Albert S. Woodhull数据结构 严蔚敏L原创 2010-06-08 20:32:00 · 2218 阅读 · 0 评论 -
操作系统学习笔记(40)--Shell程序
shell程序: while(true) { 对读入的数据进行处理 对读入的数据进行命令处理 比较是否是特殊命令,是进行处理,比如pid,exit等 根据命令处理进程}原创 2010-06-07 20:36:00 · 1213 阅读 · 0 评论 -
操作系统学习笔记(38)--ELF可执行格式
Linux使用ELF格式作为可执行文件的组织形式。 ELF有自己的详细规则。 对应的数据结构如下:原创 2010-06-05 19:56:00 · 1310 阅读 · 1 评论 -
操作系统学习笔记(37)--中断处理过程
中断处理过程: 首先必须开中断1 ....2 发生中断3 跳转到中断处理程序4 中断处理(现在操作系统分上、下部分处理,上部分是立刻响应,下部分可以延迟响应)5 是否其他操作6 返回原创 2010-06-04 23:26:00 · 2807 阅读 · 1 评论 -
操作系统学习笔记(36)-CRC码
<br />循环校验码在验证数据方面作用,使得CRC算法在操作系统中有用。<br /> <br />原创 2010-06-04 20:54:00 · 897 阅读 · 0 评论 -
操作系统学习笔记(35)--创建新进程并调度
新进程创建:1 初始化内存,分配内存页面2 初始化内核进程然后通过进程调度器调度运行原创 2010-06-03 22:29:00 · 1646 阅读 · 0 评论 -
操作系统学习笔记(39)--VFS
Linux系统在文件系统中提供了一层虚拟文件系统。这是文件系统的抽象层,所有的文件系统应该实现该抽象层的基本操作,比如open、close等。该抽象层通过统一的接口供外界调用。具体的实现是一个void* 函数来进行抽象的。原创 2010-06-06 15:55:00 · 1000 阅读 · 1 评论 -
操作系统学习笔记(30)--设置时钟
时钟处理,保护时钟中断处理和定时切换进程、时钟度量等。原创 2010-06-01 22:31:00 · 940 阅读 · 0 评论 -
操作系统学习笔记(29)--初始化Trap
和中断处理类似1 写Trap处理函数2 在Trap号中添加该函数地址原创 2010-06-01 22:30:00 · 1450 阅读 · 0 评论 -
操作系统学习笔记(27)--初始化中断
该过程是初始化系统的中断向量表,一般是256个入口。原创 2010-06-01 22:27:00 · 1104 阅读 · 0 评论 -
操作系统学习笔记(26)--TSS初始化
TSS初始化需要在GDT初始化完成后进行。原创 2010-06-01 21:57:00 · 2980 阅读 · 0 评论 -
操作系统学习笔记(16)--进入内核
操作系统进入保护模式后,通过配置GDT表和内核代码的装载设置。跳入内核代码段,此时在保护模式下运行。 跳入地址需要首先获得,一般是Main函数地址。jmp kenerlSegment:offset 进入包含模式。 进入内核后,一般是C语言写的代码。原创 2010-05-28 20:29:00 · 825 阅读 · 0 评论 -
操作系统学习笔记(17)--获取Main位置
还是使用前面的下列代码#include "stdio.h"#include "test.h"int main() { printf("this is a test. /n"); PAUSE(1000); printf("this is second test. /n"); KASSERT(1==1); printf("this is 3 test. /n")原创 2010-05-28 21:32:00 · 942 阅读 · 1 评论 -
操作系统学习笔记(9)--内核2进制文件
从图中可见文件的存储和执行。 从b80000开始执行代码。 ; This macro is used to calculate padding needed; to ensure that the boot sector is exactly 512 bytes; in size. The argument is the desired offset to be原创 2010-05-24 22:53:00 · 795 阅读 · 0 评论 -
操作系统学习笔记(4)--断言和延时功能
1 断言2 延时 #include "stdio.h"#define PAUSE(count) /do { / unsigned long i; / for (i = 0; i < (count); ++i) / ; /} while (0)#define KASSERT(cond) /原创 2010-05-22 21:37:00 · 1086 阅读 · 0 评论 -
操作系统学习笔记(8)--Bochs调式
Bochs User Manual 常用命令b 0x07c00contsnu 0x07c00 0x07c10 -- 反汇编一段内存r ctrl + c 详细信息: http://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://boch原创 2010-05-24 22:34:00 · 830 阅读 · 0 评论 -
操作系统学习笔记(2)--内核系统设置
进入初始化段后,对系统内存等进行读取并设置。 重新设置PIC。(Intel 和 IBM的不同设置) 关闭软驱。 跳转到32位保护模式和程序Main函数。 LIDT(设置中断描述符表) LGDT->段描述符基地址和大小段选择子->段描述符段描述符(8字节)->段基地址、段界限(大小)、段属性等信息。 段选择子 : 描述符索引、TI(Tab原创 2010-05-20 21:41:00 · 851 阅读 · 0 评论 -
操作系统学习笔记(1)--软驱启动
软驱启动0x55的启动标志,最大512个字节。 汇编代码,将自己复制到内存并跳转到指定地址运行初始化的程序。系统启动是在实地址模式下运行的。初始化使用系统初始化过程,设置内存,重新设置中断,跳转到保护模式,装载内核,最后跳转到内核开始函数。部分参数使用编译命令传递。 复制软驱内容及Setup.bin、Kernel.bin到指定位置,然后跳转到特定位置原创 2010-05-19 22:38:00 · 1272 阅读 · 1 评论 -
最近想学习一下操作系统
最近想学习一下操作系统原创 2010-05-18 23:12:00 · 917 阅读 · 0 评论 -
GDB调式个操作系统不知道为什么到Cont就再也不走了。
环境是bochsgdb filetarget remote localhost:1234 设置了断点后,想在断点处停止。break main cont......... 必须使用ctrl+c才可以继续。不知道为什么。 sigh 知道发邮件给我或留言。原创 2010-05-03 22:01:00 · 813 阅读 · 0 评论 -
同步方法
互斥(mutex)和信号量semaphore Mutex是一种简单同步方法 Lock(mutex) access(critial area)UnLock(mutex) 互斥类似于1个门 1把锁 1把钥匙 人进去就必须获得钥匙,出来释放钥匙。 得不到钥匙的就等待。 信号量类似于有1个门 1把锁 多个钥匙 人进去也必须获得钥匙,出来释放钥匙,在钥匙没原创 2010-03-14 18:52:00 · 716 阅读 · 0 评论 -
GCC嵌入汇编
推荐一个文档:Assembly In linux不知道谁写的,网上找了下载吧,是中文的。其中有一段精华如下: 嵌入式汇编的一般形式:__asm__ __volatile__ ("" : output : input : modify);其中,__asm__表示汇编代码的开始,其后可以跟__volatile__(这是可选项),其含义是避免“asm”指令被删除、移动或组合;然后原创 2010-03-14 14:42:00 · 1311 阅读 · 0 评论 -
geekos项目project1代码
geekos project1: 解析ELF文件格式: int k; // begin from head elfHeader* elfHead = (elfHeader*)exeFileData; // program header table, + offset from elfHead programHeader *pr原创 2010-02-08 22:02:00 · 2912 阅读 · 0 评论 -
geekOs操作系统实验
下载地址: http://dl4.csdn.net/fd.php?i=772712832192416&s=d7f7c722ee96233eb48dbd08e3c25a00原创 2009-05-09 08:43:00 · 1358 阅读 · 3 评论