随笔分类 - 操作系统笔记
极客时间--操作系统实战45讲https://time.geekbang.org/column/article/369502
摘要:之前在解决项目中关于解析core文件中,了解了关于ELF的相关知识,当时还处于萌新(现在还处于萌新状态)对于ELF格式那是一脸懵,今天就对ELF做一个简单的了解。 ELF 首先一个文本文件只有经过编译、链接形成一个可执行文件,也就是0、1代码,才能被硬件设备所识别。如下图所示: 其中,Linux下二
阅读全文
摘要:进程之间是独立的、隔离的,使得应用程序之间绝对不可以互相"侵犯"各自的领地。 但,应用程序之间有时是需要互相通信,相互写作,才能完成相关的功能,这就不得不由操作系统介入,实现一种通信机制。在这种通信机制的监管下,让应用程序之间实现通信。 Linux实现了诸如管道、信号、消息队列、共享内存,这就是Li
阅读全文
摘要:最简单的shell 为什么要从shell开始了解呢?因为熟悉它,才能知道Linux上怎么运行一个应用程序,才能明白Linux内部怎么表示一个正在运行的应用程序。 通常情况下,在Linux上运行程序,都是在终端下输入一个命令,这个命令其实大部分都是Linux系统里相应应用程序的文件名。 而终端也是Li
阅读全文
摘要:应用程序想要使用内存,必须得找操作系统申请,那就有必要先了解下Linux内核怎么管理内存的,然后再去分析应用程序的内存管理细节。 硬件架构 现代计算机体系结构被称为Non-Uniform Memory Access(NUMA),NUMA下物理内存是分布式的,由多个计算节点组成,每个CPU核都会有自己
阅读全文
摘要:为了提供内存利用率,有一些奇妙的机制,本节就来介绍下:写时复制,请求调页和mmap系统调用 写时复制 写时复制,可概括为写时复制是一种计算机编程领域中的优化技术(Copy-on-Write,简称COW) 其核心原理是,如果有多个应用同时请求相同资源,会共同获取相同的指针,指向相同的资源。这个资源或许
阅读全文
摘要:按照 CPU 功能升级迭代的顺序,CPU 的工作模式有实模式、保护模式、长模式,这几种工作模式下 CPU 执行程序的方式截然不同,下面我们一起来探讨这几种工作模式。 从一段死循环的代码说起 int main() { int* addr = (int*)0; cli(); //关中断 while(1)
阅读全文
摘要:本节来讲讲 ARM 的 AArch64 体系结构,扩展一下视野。 看看什么是 AArch64 体系,然后分析一下 AArch64 体系有什么特点,最后了解一下 AArch64 体系下运行程序的基础,包括 AArch64 体系下的寄存器、运行模式、异常与中断处理,以及 AArch64 体系的地址空间与
阅读全文
摘要:本届来看看操作系统下面的硬件层面,重点研究一下 CPU 的原理和它的加速套路。 CPU的原理初探 从操作系统的位置来看,它除了能够向上封装,为软件调用提供 API(也就是系统调用),向下又对硬件资源进行了调度和抽象。我们通常更为关注系统调用,但为了更好地设计实现一个 OS,我们当然也要对硬件足够了解
阅读全文
摘要:KVM 技术是基于内核的虚拟机,同样的 KVM 和传统的虚拟化技术一样,需要虚拟出一台完整的计算机,对于某些场景来说成本会比较高,其实还有比 KVM 更轻量化的虚拟化技术,也就是今天我们要讲的容器。 什么是容器 容器的名词源于 container,但不得不说我们再次被翻译坑了。相比“容器”,如果翻译
阅读全文
摘要:随着云计算、大数据和分布式技术的演进,我们需要在一台服务器上虚拟化出更多虚拟机,还要让这些虚拟机能够弹性伸缩,实现跨主机的迁移。 而虚拟化技术正是这些能力的基石。 亚马逊、阿里、腾讯等知名公司用到的云虚拟主机,看看其中的核心技术——KVM 虚拟化技术。 理解虚拟化的定义 什么是虚拟化? 在我看来,虚
阅读全文
摘要:上节课,我们通过实现一个获取时间的系统服务,学习了 Cosmos 里如何建立一个系统服务接口。Cosmos 为应用程序提供服务的过程大致是这样的:应用程序先设置服务参数,然后通过 int 指令进入内核,由 Cosmos 内核运行相应的服务函数,最后为应用程序提供所需服务。 这节课我们就来看看 Lin
阅读全文
摘要:Cosmos 系统已经有内存管理,进程、文件、I/O 了,这些重要的组件已经建立了,也就是说它们可以向应用程序提供服务了。 服务接口的结构 先来设计一下服务接口的整体结构,即 Cosmos 的 API 结构。因为 Cosmos 的 API 数量很多,所以我们先来分个类,它们分别是进程类、内存类、文件
阅读全文
摘要:上节了解了套接字的工作机制和数据结构,但套接字有哪些基本接口实现呢? 套接字接口 套接字接口最初是 BSD 操作系统的一部分,在应用层与 TCP/IP 协议栈之间接供了一套标准的独立于协议的接口。 Linux 内核实现的套接字接口,将 UNIX 的“一切都是文件操作”的概念应用在了网络连接访问上,让
阅读全文
摘要:现在我们来瞧一瞧 Linux 的网络程序,不过想要入门 Linux 的网络编程,套接字也是一个绕不开的重要知识点,正是有了套接字,Linux 系统才拥有了网络通信的能力。而且网络协议的最底层也是套接字,有了这个基础,你再去看相关的网络协议的时候也会更加轻松。 本节先来了解套接字的作用、工作原理和关键
阅读全文
摘要:这节课我会带你看看,现实世界中网络请求是如何穿过重重网络设备,实现大规模组网的。同时,我还会给你讲解网络架构的过去、现在,并展望一下将来的发展趋势。最后我会带你动手搭建一个现代互联网实验环境,通过实际的组网实践加深对网络架构的理解。 从传统网络架构聊起 是否好奇过,我们目前用的互联网是如何做到互联互
阅读全文
摘要:网络数据在内核中的流转,最终要服务于网络收发功能,所以先来了解下具体的网络发收过程,然后了解lwIP的网络收发。 具体的网络发收过程 理解软件的设计思想,最重要的是先理解需求,而内核中的数据流转也只是为了满足网络收发的需求而设计的。 发送过程总览 下面来看下应用程序通过网络发送数据的全过程。 应用程
阅读全文
摘要:本节作为网络篇的开始,将从一个面试高频出现的问题切入,梳理从输入URL到网卡的网络数据流动过程中都发生了什么事。 从一道经典面试题说起 输入 URL,从一个请求到响应都发生了什么事? 先概括一下全过程,让你有个整体印象。 1.常规的网络交互过程是从客户端发起网络请求,用户态的应用程序(浏览器)会生成
阅读全文
摘要:本节来瞧下Linux是如何管理文件,也验证下Linux那句口号:一切皆文件 为此,我们需要首先搞清楚什么是 VFS,接着理清为了实现 VFS 所用到的数据结构,然后看看一个文件的打开、读写、关闭的过程,最后我们还要亲自动手实践,在 VFS 下实现一个“小”且“能跑”的文件系统。 什么是 VFS VF
阅读全文
摘要:上节我们已经建立了仓库,并对仓库进行了划分,就是文件系统的格式化,有了仓库就需要往里面存取东西了,对于我们的仓库来说,就是存取应用程序的文件。 所以本节要给仓库增加一些相关的操作,这些操作主要用于新建、打开、关闭、读写文件,它们也是文件系统的标准功能,自然即使我们这个最小的文件系统,也必须要支持。
阅读全文
摘要:上节课,已经设计好了文件系统数据结构,相当于建好了仓库的基本结构。 本节将来探索仓库的划分,即什么地方存放仓库的管理信息,什么地方存放进程的“劳动成果”(也就是文件),对应于文件系统的格式化操作。 先来实现文件系统设备驱动,接着建立文件系统超级块,然后建立根目录,最后建立文件系统的位图 文件系统设备
阅读全文