logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

ELF加载、动态链接、GOT与PLT

前面已经弄清楚了.o、ELF、Section、Segment 和静态链接。./main程序显然不会凭空出现在内存里。操作系统需要先读取 ELF 文件,建立进程的地址空间,把程序需要的内容加载进去。这些动态库也得处理。这一篇主要把这部分串起来。

文章图片
#linux#学习
Ext2文件系统与inode、数据块的组织方式

学完 Ext2 之后,我觉得最重要的不是死记几个结构,而是把它们之间的关系真正串起来。Partition↓多个 Block Group├── GDT文件名↓目录↓inode↓文件属性数据块映射↓↓真正的文件内容把磁盘上的各种资源组织起来,让操作系统能够快速找到文件,同时知道哪些资源已经使用、哪些资源还可以继续分配。以前看到inode这些名词的时候,感觉都是零散的知识点。现在把它们放到一起之后,就能

文章图片
#linux#学习#c++
缓冲区、FILE 与“一切皆文件”

应用程序↓↓FILE↓C标准库缓冲区↓文件描述符 fd↓↓Linux系统调用↓内核中的 struct file↓↓具体文件 / 设备这个关系一旦理解,之前很多看似零散的知识就全部串起来了。打开文件↓读取↓写入↓关闭一个简单的printf(),背后其实隐藏着标准库、缓冲区、文件描述符、系统调用以及 Linux 内核中的文件对象。不断从一个简单的 API 往下挖,直到看到它背后的操作系统机制。

文章图片
#linux#学习
环境变量与虚拟地址空间——理解进程背后的内存世界

四天学习下来,我觉得最大的收获并不是记住几个函数,而是逐渐建立了一个完整的 Linux 进程模型。计算机↓冯诺依曼体系操作系统↓管理硬件和软件资源进程↓↓PCB↓PID / PPIDfork↓父子进程↓进程状态↓僵尸 / 孤儿↓进程调度进程地址空间↓虚拟地址↓页表↓mm_struct↓VMA↓物理内存int a = 10;就是简单地“定义一个变量”。进程↓虚拟地址空间↓页表↓物理内存↓操作系统这么

文章图片
#linux#学习
进程到底是什么?——PCB、PID、PPID 与 fork

程序的一次执行实例。但仅仅这样理解还不够。进程是承担系统资源分配的实体。也就是说,进程不仅仅是磁盘上的一份代码。进程程序代码程序数据操作系统要管理一个进程,就必须先描述这个进程。PCB——Process Control Block,进程控制块。Linux 会用描述进程,而且这个结构体会被加载到内存中。getpid();获取当前进程的 PID。getppid();获得当前进程的父进程 PID。进程不

文章图片
#linux#学习
从冯诺依曼到操作系统——理解“操作系统到底在干什么”

我们平时使用的电脑、服务器,本质上都属于计算机系统。输入设备CPU内存输出设备比如键盘、鼠标属于输入设备,显示器属于输出设备,CPU 负责计算和控制,而内存负责保存程序运行过程中需要的数据。CPU 主要和内存进行数据交互,外设的数据也需要通过内存与 CPU 或其他部分发生联系。所有设备都只能直接和内存打交道。计算机系统都包含一个基本的程序集合,这个程序集合就是操作系统。操作系统├── 内核│ ├─

#linux#学习
Linux系统编程学习笔记(二):权限、重定向与管道,开始理解Linux的规则

作为一名大二学生,现在的我还只是刚刚开始接触 Linux 系统编程。目前掌握的东西还非常基础,但我觉得基础反而是最重要的。文件描述符系统调用进程forkexec进程间通信信号网络编程的时候,前面这些知识都会成为基础。先把基础打牢,再一点一点往操作系统内部走。Linux 学习之路,继续。

#linux#学习
到底了