胡小哲的博客

胡小哲

Linux中文件描述符 fd 与 FILE 结构体

Linux中文件描述符 fd 与 flie 结构体 文件描述符 文件描述符(file descriptor)是内核为了高效管理已被打开的文件创建的索引。文件描述符的操作返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述表,所有打开的文件都将通过此表中的文件描述符来引用。(在前面的 ...

2018-02-26 18:54:29

阅读数 85

评论数 0

简单的自主 shell 编写

当我们打开一个终端的时候,我们可以在上面输入各种命令,从而与终端实现互动。 可以发现,每当一个指令的执行结束后,终端会等待我们的下一条指令的输入。 这就类似于我们写了一个死循环,一直在等待着命令的输入。当有一条指令输入时,创建子进程并将子进程替换为命令,执行子进程并且父进程等待子进程的执行...

2018-02-26 17:03:57

阅读数 212

评论数 0

进程替换

进程替换 替换原理 在前面我们在使用 fork 函数创建子进程的时候,往往和父进程执行的是相同的程序。但是实际在我们的期望中,子进程应该是执行和父进程不同的代码。所以此时,子进程往往要调用 exec函数从而执行另一个程序。调用 exec 并不创建新的进程,所以调用 exec 函数并不会改变...

2018-02-26 16:29:49

阅读数 173

评论数 0

可执行目标文件

可执行目标文件 我们已经知道连接器是如何将多个目标模块合并成一个可执行目标文件的。 此时,我们的 C 程序已经从一组 ASCII 文件文本,转化为一个二进制文件,而且这个二进制文件中包含加载程序到存储器并运行它所需的所有信息。 ELF 可执行目标文件格式 我们可以发现,可执行目标文...

2018-02-23 00:03:45

阅读数 751

评论数 0

task_struct 结构剖析

在之前我们提到的,每个进程都有一个特殊的数据结构 PCB(进程控制块)来对进程进行管理。 在 linux 中,task_struct 就是我们所说的 PCB。 PCB 是控制进程的唯一手段。 task_struct 内容大致可分为 - 标示符 :描述被进程的唯一标识符,用来区别其他进程。...

2018-02-20 22:39:00

阅读数 64

评论数 0

Linux 进程概念

进程 概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 每个进程都有自己的状态,和自己独立运行的空间。 进程需要由相关的结构体来进行管理,而在 linux 中进程是由内核中的 PCB(进程控制块) 来进行...

2018-02-20 00:19:33

阅读数 62

评论数 0

Linux 下常见的进程调度算法

在操作系统中资源是有限的,当有多个进程或线程要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程来使用资源。 所以调度算法就是 :根据系统的资源分配策略所规定的资源分配算法。 调度算法要求 :高资源利用率,高吞吐量,用户满意等原则。 调度算法设计目标: 1. 批处理系统 增加系...

2018-02-18 15:47:53

阅读数 133

评论数 0

Linux 基础 I/O

Linux 基础 I/O 概念 在 Linux 操作系统中,实现了两类对文件 I/O 的管理,一类遵循 POSIX 标准,Linux 操作系统自身提供的 IO 系统调用函数,直接进行 IO 系统调用,我们在这里对这些函数进行简单的介绍。 特性 系统调用的 I/O 函数是不带缓冲的...

2018-02-13 00:05:20

阅读数 58

评论数 0

重定位

在前面,我们了解了可重定位目标文件的文件格式以及符号链接的过程。 一旦完成了符号解析,它就把代码中的每个符号引用和确定的一个符号定义联系起来。此时,链接器就知道它的输入目标模块中的代码节和数据节的大小。现在就可以开始重定位了。 在重定位的过程中,将合并输入模块,并为每个符号分配运行时地址。 ...

2018-02-09 22:11:15

阅读数 326

评论数 0

静态库

静态库: 实际上所有的编译器都提供一种机制,将所有的相关的目标模块打包成为一个单独的文件。这个文件称为静态库。 静态库可以用作链接器的输入,当链接器构造一个输出的可执行文件时,它只拷贝静态库到被应用程序引用的目标模块。 在编译完成之后,静态库可以被抛弃掉。 优点: 可以对文件进行打包。 ...

2018-02-08 22:59:22

阅读数 83

评论数 0

可重定位目标文件

目标文件有三种形式: 1. 可重定位目标文件 2. 可执行目标文件 3. 共享目标文件 编译器和汇编器生成可重定位目标文件/共享目标文件,连接器生成可执行目标文件。 在这里我们首先介绍可重定位目标文件。 可重定位目标文件:包含二进制代码和数据,可以在编译时与其他可重定位目标文件合...

2018-02-06 00:38:19

阅读数 230

评论数 0

AVL 树

由于之前的搜索二叉树在单支树的情况下,时间复杂度依然为 O(N),所以我们应该对其进行调整,此时遍出现了 AVL 树,AVL 树是最先发明的自平衡二叉搜索树。在AVL树中,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是 O(log...

2018-02-05 17:19:42

阅读数 46

评论数 0

模拟实现 tree 指令

linux下的 tree 指令: 打印所有文件和目录,默认不打印隐藏文件 在这里,我只实现默认方式,并且文件只区分出需要进行遍历的目录文件,其他文件统一直接进行输出。 要实现这个指令 首先要清楚 Linux 下的文件系统,以及如何对目录文件进行读取。 文件表结构: 首先 我们要...

2018-02-02 14:58:16

阅读数 318

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭