关于操作系统的理解
计算机中的硬件, 软件,操作系统都是可以看作一个状态机 先讲os, os的模型简单说就是一个管理多个软件(状态机)的一个状态机. os的每个状态就是当前时间下的所有其他进程的状态, 在单核处理器下, 每次os的状态转移时会随机选择一个程序运行下一步,这就是调度. os的状态机中除了进程外,还有为了进程通信的缓冲区. ...
计算机中的硬件, 软件,操作系统都是可以看作一个状态机 先讲os, os的模型简单说就是一个管理多个软件(状态机)的一个状态机. os的每个状态就是当前时间下的所有其他进程的状态, 在单核处理器下, 每次os的状态转移时会随机选择一个程序运行下一步,这就是调度. os的状态机中除了进程外,还有为了进程通信的缓冲区. ...
对于一个数据, 要先判断是基数还是序数, 如果要计数,还要考虑是否包括边界 基数: 绝对的,有一个基底数, 日常生活中基底是1; 编程中一般是0; 常见的基数概念有 数量, 个数, 体积, 面积, 时间段, 年龄(周岁), 分数 序数: 相对的, 表示先后顺序, 常见的概念: 位次, 时间点 端点的开闭规律: 全开 基本的转换规律: 基数 = 序数 - based + 1 ...
为了追求极限性能,cpu硬件搞出了独立缓存(L1/L2)和乱序执行,但也留下了“数据不同步”和“顺序错乱”的烂摊子。硬件用MESI协议和内存屏障指令来修补。编程语言为了抹平不同平台(xv6/arm)的差异,制定了内存模型契约,让程序员通过指定内存序(relaxed/acquire/release/sc)来指挥编译器和cpu自动插入屏障。而程序员利用这些契约和底层的硬件CAS指令,最终构建出了无锁算法以及互斥锁等同步原语,为多线程并发提供了正确同步的基础设施。 ...
关于并发编程的一些思考 今天我在咖啡店观察店员们忙碌的身影,脑海中不禁浮现出计算机科学中“并发编程”的多线程模型。仔细琢磨后发现,同样是引入“多线程”来提高效率,根据任务性质的不同,至少存在两种截然不同的情形。这不仅是咖啡店运营的智慧,更是软件架构设计的生动缩影。 ...
需要三个变量:头下标l,尾下标r,队列的size 范围[l, r), size== r-l 加入元素: 判断size<capacity, 将x放入尾部, 尾部++(如果超过数组边界,返回到数组开头) size++ ...
🛠️ 调试记录:xv6 用户程序内存布局冲突异常 1. 问题描述 (Description) 在 xv6 实验环境中,向内核添加自定义系统调用(Syscall)并编写用户态测试程序(Test Case)时,程序在系统调用逻辑执行完毕后,无法正常返回用户态继续执行。表现为进程卡死或触发硬件级页错误(Page Fault),而代码逻辑本身(内核实现)经检查无误。 ...
不同的进程在各自的房间内运行, 每个房间有自己的编号pid, 进程之间互不干涉, 房间内有许多种与外界通信的方式, 他们有各自的用途和特性, 分布在墙壁上; 房间内还分成多个区域, 分别是: 代码区(.text), 已初始化的全局/静态数据区(.data), 未初始化的全局/静态数据区(.bss), 堆, 栈, 内存映射区, 环境变量与命令行参数区, 内核空间 ...
现代操作系统的内核(如 Linux 内核)中有一个专门的模块叫做: 网络协议栈(Network Stack) 主要职责详解 职责 类比说明 技术术语 1. 接收和发送数据包 公司前台接收快递 & 发送包裹 数据链路层、IP 层、传输层 2. IP 地址管理 给每个员工分配邮箱地址 IPv4 / IPv6 地址配置 3. 路由选择 快递要走哪条路线最短最快 路由表(Routing Table) 4. 封装与解封装 包裹加标签 / 拆标签 数据封装(Encapsulation)与解封装(Decapsulation) 5. 传输控制(TCP) 控制文件是否完整送达 TCP 流量控制、拥塞控制 6. 端口号管理 不同部门接收不同类型的快递 端口绑定、监听、转发 7. 安全防护(防火墙) 保安检查包裹内容 Netfilter / iptables / nftables 8. NAT 转换 公司统一出口代理 Network Address Translation 9. 域名解析支持 内部电话簿查询联系方式 DNS 解析缓存、本地 hosts 10. 支持多种协议 公司支持各种沟通方式(电话、邮件、视频会议) 支持 TCP、UDP、ICMP、HTTP、HTTPS、FTP 等 类比图:操作系统网络部门的组织架构 小组 类比角色 职责 套接字接口组(Socket Layer) 客户接待员 接收进程请求(如浏览器访问网页) 传输组(TCP / UDP) 快递打包组 控制可靠传输或快速发送 网络组(IP 层) 邮政分拣中心 决定发往哪个城市(IP 地址) 链路组(MAC 层) 快递站 决定发给哪个局域网内的目标主机 路由组(Routing) 导航调度中心 选择最优路径(下一跳) 设备驱动组(NIC Driver) 快递员 实际把包裹送出去(通过网卡) 安全组(Netfilter / Firewall) 保安检查岗 检查是否允许通行 NAT 组 公司代理出口 统一管理内部员工对外通信 DNS 缓存组 内部电话簿管理员 记录域名与 IP 的对应关系 Linux 的网络部分是一个庞大的子系统,主要包括以下几个关键模块: ...