
C/C++
马如林
桂林电子科技大学计算机硕士,15年+的编程和架构经验,美国PMI认证PMP,Oracle认证Java程序员,信息系统项目管理师,软件设计师,CET6。
展开
-
zeromq and jzmq
install c testinstall jzmq java testhttp://zguide.zeromq.org/page:allhttp://zeromq.org/bindings:java原创 2013-10-19 22:13:27 · 1946 阅读 · 0 评论 -
操作系统学习笔记(34)--内存分页
内存分页使用CR寄存器的标志位设置获取内存物理地址步骤如下:原创 2010-06-02 22:21:00 · 967 阅读 · 0 评论 -
操作系统学习笔记(33)--文件系统
初始化文件系统并装载文件系统根据启动时的根目录和文件结构进行初始化操作。原创 2010-06-02 07:20:00 · 1033 阅读 · 1 评论 -
操作系统学习笔记(27)--初始化中断
该过程是初始化系统的中断向量表,一般是256个入口。原创 2010-06-01 22:27:00 · 1137 阅读 · 0 评论 -
指针地址长度
<br /> <br /> int * p<br /> <br /> int *q;<br /> <br /> q = p;<br /> p++;<br /> <br /> p - q = 1原创 2010-06-01 21:19:00 · 1303 阅读 · 0 评论 -
操作系统学习笔记(24)--内存页面设置
有了内存大小和粒度设置可以获得页数量原创 2010-05-31 20:01:00 · 960 阅读 · 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 · 1320 阅读 · 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 · 988 阅读 · 0 评论 -
推荐一个网页
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/原创 2010-05-29 18:15:00 · 929 阅读 · 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 · 955 阅读 · 1 评论 -
操作系统学习笔记(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 · 1858 阅读 · 1 评论 -
操作系统学习笔记(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 · 756 阅读 · 0 评论 -
操作系统学习笔记(20)--开中断、关中断及原子操作
操作系统在很多情况下,需要进行原子操作,此时是不可以进行中断响应的。根据需要此时需要关闭中断,在原子操作完了之后再进行开中断。 中断相关的操作有:1 知道EFFLAG的中断位2 中断开、关的指令3 如果进行C语言设置时的参数传递 下面给出部分伪码: 原子操作() { 开始原子操作(); 操作; 结束原子操作();}原创 2010-05-30 12:13:00 · 12662 阅读 · 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 · 846 阅读 · 0 评论 -
操作系统学习笔记(16)--进入内核
操作系统进入保护模式后,通过配置GDT表和内核代码的装载设置。跳入内核代码段,此时在保护模式下运行。 跳入地址需要首先获得,一般是Main函数地址。jmp kenerlSegment:offset 进入包含模式。 进入内核后,一般是C语言写的代码。原创 2010-05-28 20:29:00 · 843 阅读 · 0 评论 -
保护模式介绍
http://baike.baidu.com/view/177586.htm?fr=ala0_1原创 2010-05-25 23:29:00 · 778 阅读 · 0 评论 -
操作系统学习笔记(28)--初始化进程调度
内核进程原创 2010-06-01 22:28:00 · 1063 阅读 · 0 评论 -
操作系统学习笔记(32)--初始化IDE
对IDE进行初始化操作原创 2010-06-02 07:19:00 · 1195 阅读 · 0 评论 -
操作系统学习笔记(42)--感悟
<br />学了一段时间的操作系统源代码,自己写些感受。<br /> <br />操作系统不是想象的那样深不可测,按照系统的启动过程是可以理解的。所以有时候有人认为Linus不是像你想象的那样伟大是有道理的,感觉Stallman,Kernighan、Ritchie、Gosling等比他NB点。<br /> <br />操作系统是按照CPU的指令执行的,我们写操作系统是对计算机体系结构和指令结构按照图灵机的理论进行运行。<br /> <br />怎样将运算结果进行存储和进程调度是操作系统的2个核心问题。其它的原创 2010-06-08 20:59:00 · 3611 阅读 · 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 · 2253 阅读 · 0 评论 -
操作系统学习笔记(40)--Shell程序
shell程序: while(true) { 对读入的数据进行处理 对读入的数据进行命令处理 比较是否是特殊命令,是进行处理,比如pid,exit等 根据命令处理进程}原创 2010-06-07 20:36:00 · 1231 阅读 · 0 评论 -
STL使用
在linux下,默认gcc可以使用stl库原创 2010-06-06 11:36:00 · 1019 阅读 · 0 评论 -
C语言的定义匹配
<br />我不知道这个标准是什么,知道是这个关系.<br /> <br /> <br />Add_To_Back_Of_Page_List(&s_freeList, page); <br /> <br /> <br />static __inline__ void Add_To_Back_Of_##LType(struct LType *listPtr, struct NType *nodePtr) { /<br /> KASSERT(!Is_Member_Of_##LType(listP原创 2010-06-05 21:36:00 · 941 阅读 · 0 评论 -
操作系统学习笔记(38)--ELF可执行格式
Linux使用ELF格式作为可执行文件的组织形式。 ELF有自己的详细规则。 对应的数据结构如下:原创 2010-06-05 19:56:00 · 1327 阅读 · 1 评论 -
操作系统学习笔记(35)--创建新进程并调度
新进程创建:1 初始化内存,分配内存页面2 初始化内核进程然后通过进程调度器调度运行原创 2010-06-03 22:29:00 · 1668 阅读 · 0 评论 -
操作系统学习笔记(37)--中断处理过程
中断处理过程: 首先必须开中断1 ....2 发生中断3 跳转到中断处理程序4 中断处理(现在操作系统分上、下部分处理,上部分是立刻响应,下部分可以延迟响应)5 是否其他操作6 返回原创 2010-06-04 23:26:00 · 2834 阅读 · 1 评论 -
操作系统学习笔记(36)-CRC码
<br />循环校验码在验证数据方面作用,使得CRC算法在操作系统中有用。<br /> <br />原创 2010-06-04 20:54:00 · 921 阅读 · 0 评论 -
操作系统学习笔记(39)--VFS
Linux系统在文件系统中提供了一层虚拟文件系统。这是文件系统的抽象层,所有的文件系统应该实现该抽象层的基本操作,比如open、close等。该抽象层通过统一的接口供外界调用。具体的实现是一个void* 函数来进行抽象的。原创 2010-06-06 15:55:00 · 1010 阅读 · 1 评论 -
操作系统学习笔记(31)--初始化键盘
键盘处理也是中断响应。键盘有键盘映射码和特殊键处理。基本思想还是中断和进程调度执行和输入输出及缓冲区的关系。原创 2010-06-01 22:33:00 · 1199 阅读 · 0 评论 -
操作系统学习笔记(30)--设置时钟
时钟处理,保护时钟中断处理和定时切换进程、时钟度量等。原创 2010-06-01 22:31:00 · 956 阅读 · 0 评论 -
操作系统学习笔记(29)--初始化Trap
和中断处理类似1 写Trap处理函数2 在Trap号中添加该函数地址原创 2010-06-01 22:30:00 · 1472 阅读 · 0 评论 -
操作系统学习笔记(26)--TSS初始化
TSS初始化需要在GDT初始化完成后进行。原创 2010-06-01 21:57:00 · 3013 阅读 · 0 评论 -
操作系统学习笔记(25)--内核堆设置
1 设置内核堆开始位置2 设置堆大小填充内存原创 2010-06-01 20:57:00 · 774 阅读 · 0 评论 -
操作系统学习笔记(12)--代码地址
00011388 t Add_Digit00012570 t Add_Page_Range00014d5e t Add_To_Back_Of_All_Thread_List00015096 t Add_To_Back_Of_Thread_Queue00016978 t After_Err00016908 t After_No_Err000128fc T Alloc_Page00012bdc T A原创 2010-05-25 23:20:00 · 1806 阅读 · 0 评论 -
操作系统学习笔记(15)--保护模式
程序一般运行在保护模式下。 关闭软驱马达(使用软驱启动)要启动A20总线设置GDT设置IDT开启包含模式 跳转到指定代码处,进入保护模式。详细资料需要查看Intel的CPU设计文档等。 ; Switch to protected mode! mov ax, 0x01 lmsw ax原创 2010-05-27 22:23:00 · 804 阅读 · 0 评论 -
C/C++语言void及void指针深层探索
C/C++语言void及void指针深层探索 宋宝华 2006-09-28 22:46:44 太平洋电脑网转载 2006-10-13 10:07:00 · 1033 阅读 · 0 评论 -
函数指针与typedef
关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到的转载 2006-10-11 20:22:00 · 918 阅读 · 0 评论 -
C语言的数组
数 组 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。数组转载 2006-10-07 15:24:00 · 1999 阅读 · 1 评论 -
大内高手—常见内存错误
大内高手—常见内存错误转载时请注明出处:http://blog.youkuaiyun.com/absurd随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使转载 2006-10-11 20:46:00 · 1546 阅读 · 0 评论 -
c/c++编程基础篇之浅析堆&栈
五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,转载 2006-10-11 20:36:00 · 1139 阅读 · 0 评论