![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入理解计算机系统
weixin_43894877
这个作者很懒,什么都没留下…
展开
-
系统I/O
共享文件内核使用三个相关的数据结构来表示打开的文件1.描述符表:每个进程都有独立的描述符表。他的表项是由进程打开的文件描述符索引的,每个打开的文件描述符指向文件表当中的一项。2.文件表:打开的文件集合是由一张文件表来表示的所有的进程共享这张表。每个文件表的表项的组成:当前文件的位置,引用计数,一个指向v-node表中对应表项的指针。关闭一个描述符会减少相应文件表表项当中的引用计数,直到这个引...原创 2019-12-03 21:20:36 · 133 阅读 · 0 评论 -
可重定位目标文件解析
从源代码到可执行目标文件要经过以下几个步骤:源代码-->预处理-->编译-->优化-->汇编-->链接–>可执行文件Source–(编译)–> Assembly–(汇编)–>Obj–(链接)–>PE/ELF1.编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理[析] 伪指令主要包括以下四个方面(1)宏定义指令...原创 2019-12-03 12:03:49 · 784 阅读 · 0 评论 -
深入理解计算机系统———fork()函数的运用
fork()函数定义如下:pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1函数说明一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fo...原创 2019-12-02 17:23:22 · 630 阅读 · 0 评论 -
定义数组的思考与实验
#include <stdlib.h>#include <stdio.h>#include <unistd.h>static void show_pointer(void *p, char *descr) { // printf("Pointer for %s at %p\n", descr, p); printf("%s\t%p\...原创 2019-05-28 10:20:55 · 193 阅读 · 0 评论 -
缓冲区溢出演示
运行如下代码:/* Demonstration of buffer overflow */#include <stdio.h>#include <stdlib.h>/* Implementation of library function gets() */char *gets(char *dest){ int c = getchar(); char ...原创 2019-05-27 20:41:02 · 329 阅读 · 0 评论 -
十六进制数字转换为以‘\n’结尾的字符串
/* Convert sequence of hex digits on command line into a string, terminated by \n *//*将一串命令行的十六进制数字转换为以‘\n’结尾的字符串*/#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[])...原创 2019-05-27 19:57:49 · 2007 阅读 · 0 评论 -
浮点数加减运算的思考
运行如下代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUFSIZE 256int main(int argc, char *argv[]) { char prefix[BUFSIZE]; char next[BUFSIZE]; int i; ...原创 2019-05-27 19:31:00 · 319 阅读 · 0 评论 -
递归的思考与实验
/* Example of deep recursion */#include <stdio.h>#include <stdlib.h>int recurse(int x) { int a[1<<15]; /* 4 * 2^15 = 64 KiB */ printf("x = %d. a at %p\n", x, a); ...原创 2019-05-27 19:16:09 · 163 阅读 · 0 评论 -
关于栈溢出的思考与实验
运行如下代码:#include <stdio.h>#include <stdlib.h>typedef struct { int a[2]; double d;} struct_t;double fun(int i) { volatile struct_t s; s.d = 3.14; s.a[i] = 10737418...原创 2019-05-27 17:35:39 · 332 阅读 · 0 评论 -
数据类型的溢出
先运行如下代码,看看结果:#include <stdio.h>#include <stdlib.h>int sq(int x) { return x*x;}int main(int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) { int x = atoi(arg...原创 2019-05-27 17:15:22 · 823 阅读 · 0 评论