操作系统实践
文章平均质量分 62
Wu_uuuu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Unix/Linux中的read和write函数
1、文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。 2、write函数 write函数定义如下: #include ssize_t write(i原创 2016-12-17 19:18:01 · 620 阅读 · 0 评论 -
函数调用栈理解
一、相关寄存器(1) esp:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。 (2) ebp:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。(ebp在当前栈帧内位置固定,故函数中对大部分数据的访问都基于ebp进行) (3) eip:指令寄存器原创 2017-04-23 21:43:05 · 544 阅读 · 0 评论 -
C语言的代码内存布局详解
一个程序本质上都是由 BSS 段、data段、text段三个组成的。这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by转载 2017-04-23 20:08:08 · 317 阅读 · 0 评论 -
C语言中函数参数的入栈顺序
C语言中函数参数入栈顺序的确是从右至左的,一个例子来证明:#include <stdio.h>void func(int x, int y, int z){ printf("x = %d at [%X]\n", x, &x); printf("y = %d at [%X]\n", y, &y); printf("z = %d at [%X]\n",原创 2017-04-23 20:03:44 · 630 阅读 · 0 评论 -
C语言中extern的用法
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明exte转载 2017-04-23 19:26:59 · 667 阅读 · 0 评论 -
memcpy及memmove函数详解
•memcpy是把src指向的对象中的size个字符拷贝到dest所指向的对象中,返回指向结果对象的指针. •memmove也是把src指向的对象中的size个字符拷贝到dest所指向的对象中,返回指向结果对象的指针,但这两个函数在处理内存区域重叠的方式不同.注意memmove这个函数名称中有”move”这个单词,而实际上src处的数据仍然还在,并没有真的被”移动”了!这个函数名称有它的历史原因,是原创 2017-04-20 21:48:07 · 1349 阅读 · 0 评论 -
为什么主引导记录的内存地址是0x7C00?
简单说,计算机启动是这样一个过程。 1、通电 2、读取ROM里面的BIOS,用来检查硬件 3、硬件检查通过 4、BIOS根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),加载在内存地址 0x7C00 5、主引导记录把操作权交给操作系统 所以,主引导记录就是引导"操作系统"进入内存的一段小程序,大小不超过1个扇区(512字节)。0x7C00这个地址来自Inte转载 2017-04-19 22:30:13 · 1206 阅读 · 0 评论 -
计算机启动过程
一、第一阶段:BIOS上个世纪70年代初,”只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。这块芯片里的程序叫做”基本输入输出系統”(Basic Input/Output System),简称为BIOS。 1.1 硬件自检 BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做”硬件自检”(Power-O转载 2017-04-19 22:24:49 · 296 阅读 · 0 评论 -
Intel80x86内存寻址
Intel80x86内存寻址一、内存地址地址分为三种:逻辑地址 使用这种地址指定一个操作数或一条指令的地址,由16位的段(segment)和32位的偏移量(offset)组成线性地址 32位无符号整型,最高可表示4GB地址,通常用16进制数字表示,值的范围从0x00000000到0xffffffff。物理地址 用于芯片级内存单元寻址,由32位无符号整数表示CPU通过分段单元把一个逻辑地原创 2017-04-28 09:31:26 · 907 阅读 · 0 评论 -
操作系统页面置换算法之先进先出(FIFO)算法
操作系统页面置换算法之先进先出(FIFO)算法在操作系统页面置换算法中,最简单的页面置换算法为FIFO算法。FIFO页面置换算法为每个页记录着该页调入内存的时间。当必须置换一页时,将选择最旧的页。注意不需要记录调入一页的确切时间。可以创建一个FIFO队列来管理内存中的所有页。队列中的首页将被置换。当需要调入页时,将它加到队列的尾部。下面将以Java语言模拟FIFO算法,其中,帧的数量为5,原创 2016-08-03 16:42:41 · 14024 阅读 · 0 评论 -
操作系统页面置换算法之最优置换(OPT)算法
定义 最优置换算法(OPT)是指,其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。算法过程 现举例说明如下。原创 2016-08-03 17:03:43 · 53986 阅读 · 4 评论 -
操作系统页面置换算法之最近最少使用算法(LRU)
LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。下面以java语言模拟实现LRU算法,其中,引用串中不包含0号页号。代码如下:import java.原创 2016-08-03 17:17:23 · 4641 阅读 · 0 评论 -
Linux C UDP Socket实现客户与服务器简单通信
在linux平台下用c语言udp协议实现客户与服务器的简单通信与封装的实现一、服务器端1、新建CreateServer.c和CreateServer.h文件,服务器的创建代码在此实现,程序中封装了创建TcpSocket和UdpSocket服务器的方法,可直接调用函数创建服务器,客户端的业务则单独处理,方便了逻辑设计与代码移植。CreateServer.h代码如下:#ifndef CREATESERV原创 2016-12-17 20:12:15 · 2332 阅读 · 0 评论 -
Linux C TCP Socket实现客户与服务器简单通信
在Linux平台下用C语言udp协议实现客户与服务器的简单通信与封装的实现一、服务器端1、新建CreateServer.c和CreateServer.h文件,服务器的创建代码在此实现,程序中封装了创建TcpSocket和UdpSocket服务器的方法,可直接调用函数创建服务器,客户端的业务则单独处理,方便了逻辑设计与代码移植。CreateServer.h代码如下:#ifndef CREATESERV原创 2016-12-17 20:20:49 · 7905 阅读 · 0 评论 -
Linux C Socket常用函数详解
Linux C Socket常用函数详解(1) struct sockaddr(套接字的普通C定义通用的地址结构) struct sockaddr { u_char sa_len;//长度 u_short sa_family;//协议 char sa_data[14];//数据 }; (2) struct sockaddr_in(IP专用的地址结构) struct sockaddr原创 2016-12-17 20:49:31 · 910 阅读 · 0 评论 -
Linux系统调用之open, close
Linux系统调用open、close介绍简单实例原创 2016-12-17 19:41:51 · 2168 阅读 · 0 评论 -
c语言函数返回值问题
C语言中,调用函数结束时,如果有返回值,会涉及到函数返回值传递问题,根据返回值的大小,会有不同的处理方式。 一、返回值小于等于4个字节 函数执行完毕后,如果返回值小于等于4字节,则会将值保存在寄存器eax中,然后在调用函数中通过读取eax的值来获得返回值。 二、当返回值大小在[5, 8]字节范围内时 因为eax寄存器只有四个字节,因此,当返回值在[5, 8]字节范围内时,一般采用eax和ed原创 2017-04-23 22:00:06 · 4566 阅读 · 0 评论
分享