操作系统
文章平均质量分 88
聊一些关于操作系统的学习经验和相关知识
poison_Program
啥都搞不懂的程序猿
展开
-
电脑启动的过程结合最小操作系统
脚本时,整个过程可以被理解为一个模拟的启动流程,从物理机硬件的初始化到操作系统层面的启动,直到达到用户空间初始化。这些组件共同工作,确保Linux系统能够有效地启动和运行。提供了所需的环境和工具来成功地加载系统的其余部分。则简化了开发和构建过程,使得更新和维护更为简便。命令启动 QEMU 并运行您提供的。负责引导过程中的早期阶段,而。原创 2024-04-29 07:44:27 · 1472 阅读 · 0 评论 -
深入探索:从输入网址 `www.qq.com` 到页面显示的完整网络流程
从简单的操作到复杂的后台处理,这一系列步骤展示了现代互联网技术的复杂性和精确性。理解这些基础的网络交互过程,可以帮助我们更好地理解网络应用的性能、优化和安全问题。本文旨在揭露当你浏览网站时,背后发生的技术细节和过程。原创 2024-04-30 07:20:49 · 481 阅读 · 1 评论 -
操作系统:现代计算的基石
操作系统作为计算机系统中至关重要的组成部分,它不仅是资源的管理者,也是提供必要服务的平台。通过管理程序的状态变化和执行系统调用,操作系统确保了程序的高效和安全运行。深入理解操作系统如何处理这些任务,对于开发高效且安全的应用程序是非常重要的。它不仅帮助程序员更好地利用操作系统提供的服务,也有助于系统管理员更有效地管理和优化系统性能。原创 2024-05-02 00:14:38 · 73 阅读 · 1 评论 -
多线程编程并理解并发的执行笔记
并发概念:并发是指程序、算法或问题的不同部分或单元可以不按顺序或者部分顺序执行,而不影响最终结果的能力。并发的基本单位:线程(共享内存的多个执行流)执行流拥有独立的堆栈/寄存器共享全部的内存(指针可以互相引用)入门create(fn)创建一个入口函数是fn的线程,并立即开始执行参数tid从 1 开始编号语义:在状态中新增 stack frame 列表并初始化为fn(tid)join()等待所有运行线程的fn返回在main返回时会自动等待所有线程结束。原创 2024-05-03 00:06:45 · 1082 阅读 · 0 评论 -
并发控制互斥笔记
多处理器系统中数据的一致性和互斥访问所有的CPU的一级缓存都是连着的,如果是多个CPU的话,用在内存中放置标志位,来保证对当前内容的原子性读取,Xchg指令。Lock 指令的现代实现(自旋锁)(类似于悲观锁)retry:goto retry;通常描述在 L1 cache 层保持一致性 (ring/mesh bus)相当于每个 cache line 有分别的锁(实际上,这不是传统意义上的锁。原创 2024-05-04 00:01:37 · 792 阅读 · 0 评论 -
并发控制同步
同步的实现方法:信号量、条件变量线程同步:在某个时间点共同达到互相已知的状态生产者-消费者问题:分析左括号:生产资源 (任务)、放入队列右括号:从队列取出资源 (任务) 执行retry:goto retry;count++;count--;多个线程都等待锁的时候,容易在goto循环出空转条件变量条件变量是一个显式队列,当某些执行状态(即某些条件)不符合预期时(通过等待条件),线程可以将自己放入其中;原创 2024-05-04 00:02:43 · 1126 阅读 · 0 评论 -
如何面对并发下的bug
应对bug的方法在代码里边增加很多检查(加断言)usleep(1);join();防御性编程:把程序需要满足的条件用 assert 表达出来。assert()并发bug:死锁 (Deadlock)上锁的顺序很重要……swap本身看起来没有问题,swap(1, 2);swap(2, 3)swap(3, 1)→ 死锁避免死锁死锁产生的四个必要条件互斥:一个资源每次只能被一个进程使用请求与保持:一个进程请求资阻塞时,不释放已获得的资源。原创 2024-05-05 07:06:58 · 1175 阅读 · 0 评论 -
fork,execve,_exit从第一个程序到所有程序
这样,我们就看到了一个完整的程序生命周期:创建、执行和终止,都是通过操作系统提供的系统调用来管理的。系统已经启动,并且我们需要从一个简化的 shell 启动一个程序,如。linux中的pstree的systemd的来历。→ 程序 (状态机) 执行 + 系统调用。操作系统会加载 “第一个程序”原创 2024-05-08 00:01:50 · 1260 阅读 · 0 评论 -
Dash Shell手册解读
Dash (Debian Almquist Shell) 是一种符合 POSIX 标准的 Unix Shell,是 /bin/sh 的一个实现,目标是最小化和提高速度。Dash 是从 NetBSD 的 ash (Almquist SHell) 演变而来,并在 2002 年被重新命名为 Dash。Dash 特别适用于脚本执行,因为它启动速度快,执行效率高。掌握 Dash 的这些高级功能将使你能够编写更有效、更健壮的 Shell 脚本,不仅能够提高个人的工作效率,也能在整个系统层面带来性能的提升。原创 2024-05-14 00:02:11 · 1110 阅读 · 0 评论 -
详述进程的地址空间
表头:地址 (范围) ,权限 (rwxsp),对应的文件: offset, dev, inode, pathname。进程的地址空间 = 内存里若干连续的 “段”libc后的空白部分,是未被初始化的变量。合法的地址 (可读或可写)管理进程地址空间的系统调用。Execve 之后……原创 2024-05-15 00:19:35 · 1289 阅读 · 0 评论 -
结合libc手册描述libc与Linux的爱恨情仇
libc是标准C库,包含了一系列标准函数,这些函数可以被所有C程序以及其他语言的程序使用。提供基础函数:如字符串处理、内存管理、输入输出操作等。封装系统调用:为程序提供一致的接口,使得开发者不必直接处理复杂的系统调用。libc作为Linux系统的标准C库,在程序开发中扮演着基础且关键的角色。它不仅为C语言提供了标准化的函数库和系统调用封装,还通过其高度优化的实现和广泛的功能支持,为高级编程语言提供了可靠的基础。原创 2024-05-21 00:00:44 · 1150 阅读 · 0 评论 -
现代操作系统之内存虚拟化的处理(结合具体代码示例)
虚拟化内存是一种内存管理技术,通过将物理内存抽象成虚拟地址空间,使得每个进程拥有独立的地址空间。这种方法不仅提升了内存利用率,还提高了系统的安全性和稳定性。虚拟化内存管理通过分页和交换机制,实现了内存资源的高效利用和灵活管理。通过使用 TLB 和优化的页表结构,系统能够快速进行地址转换。同时,操作系统采用多种交换策略,在内存紧张时有效释放资源,确保系统性能和稳定性。了解这些机制和策略,对于深入理解操作系统的内存管理原理,以及优化程序性能,都具有重要意义。原创 2024-05-23 00:03:04 · 965 阅读 · 0 评论 -
递归,进程fork(),以及线程clone()之间的比较
递归、进程fork()和线程clone()递归适用于自然递归问题,代码简洁,但受限于栈空间。进程fork()提供高隔离性,适用于并行处理独立任务,但资源开销大。线程clone()提供高效共享和并发处理,适用于需要高效数据共享和高并发的场景,但同步复杂。理解这三种方法的特点和适用场景,能够帮助开发者在实际项目中做出最优选择,从而提高代码性能和可靠性。希望这篇文章能帮助您更好地理解递归、进程和线程之间的区别和联系。如有任何问题或建议,欢迎在评论区讨论交流。原创 2024-05-24 00:00:00 · 1241 阅读 · 0 评论 -
可执行文件以及其加载过程
可执行文件是程序经过编译和链接后生成的文件,其中包含了机器指令、数据和必要的元信息,使得操作系统能够加载并执行该程序。Windows:使用PE(Portable Executable)格式,文件扩展名通常为.exe或.dll。macOS:使用Mach-O(Mach Object)格式,文件扩展名通常为.app或.dylib。Linux:使用ELF(Executable and Linkable Format)格式,文件扩展名通常为没有特定的要求,但共享库使用.so。原创 2024-05-29 00:21:00 · 1379 阅读 · 0 评论 -
探索文件系统的世界:从基础概念到挂载机制
同时,挂载机制和链接功能进一步扩展了文件系统的灵活性和功能性。因此,磁盘抽象和文件系统的结合,为我们提供了一个强大的数据管理工具,为计算机系统的正常运行和数据管理提供了重要支持。本文将深入探讨以下几个主题:为什么将磁盘抽象为块设备,为什么有了磁盘抽象还需要文件系统,文件系统如何作为虚拟磁盘,文件系统的分类,文件系统中的挂载,以及硬链接和软链接的概念。它在物理磁盘的基础上,通过逻辑结构(如文件和目录)来组织数据,使得用户和应用程序无需直接操作底层的磁盘块和扇区,而是通过更为直观和易用的接口进行数据存取。原创 2024-06-05 00:00:00 · 1203 阅读 · 0 评论 -
深入了解FAT文件系统
FAT文件系统由于其简单性和兼容性,仍然在许多领域广泛应用。了解其内部结构和工作原理有助于更好地管理和维护存储设备,同时在需要时也可以进行数据恢复和故障排除。希望这篇博客能够帮助你更好地理解FAT文件系统的运作机制。原创 2024-06-10 00:00:00 · 1991 阅读 · 0 评论 -
Xv6文件系统详解
Xv6文件系统虽然简单,但其设计和实现涵盖了许多现代文件系统的核心概念。通过理解Xv6的磁盘布局、文件读取和写入操作以及崩溃恢复机制,我们可以更好地理解操作系统和文件系统的基本原理。希望这篇文章能帮助您深入了解Xv6文件系统,并为进一步研究和学习提供一个坚实的基础。原创 2024-06-12 10:44:46 · 1402 阅读 · 0 评论 -
基于Chrome DevTools手册,介绍DevTools的使用方法
通过这些详细的步骤和示例,你可以更好地理解和使用谷歌开发者工具(DevTools)来调试、分析和优化网页。在 Console 中输入并执行上述代码,将输出 “Hello, Console!原创 2024-05-30 00:17:52 · 1431 阅读 · 0 评论 -
HTML、DOM 和 BOM:深入解析网页加载和渲染过程
HTML(HyperText Markup Language)是用于描述网页结构的标记语言。它通过标签(如<div><p><a>等)定义网页的内容和布局,是网页的基础。DOM(Document Object Model)是 HTML 文档的编程接口。它将文档表示为树结构(或节点树),每个节点代表文档的一部分(例如元素、属性、文本)。通过 DOM,开发者可以使用 JavaScript 动态地访问和修改文档的内容、结构和样式。原创 2024-05-31 00:35:54 · 2474 阅读 · 0 评论