在学校的时候泛泛读过一遍 apue,其中的部分知识只是有个大概印象,其实我个人对底层技术还是有热情和追求的 哈哈,打算把经典的书籍结合遇到的场景重读一遍,先拿 Linux 文件系统练习下。代码参考的是Linux早期的代码,没有现代内核的高级特性,VFS这部分只有介绍。
操作系统堪称是IT皇冠上的明珠,Linux阅码场专注Linux操作系统内核研究, 它的文章云集了国内众多知名企业一线工程师的心得,畅销著作有《linux设备驱动开发详解 》等。
在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。 下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作。 1、主设备号和次设备号 对于字符设备的访问是通过文件系统中的设备名称进行的。他们通常位于/dev目录下。如下: xxx@ubuntu:~$ ls
lsof(list open files)用于查看进程打开的文件,是十分方便的系统监测工具。因为 lsof 命令需要访问核心内存和各种系统文件,所以需要 root 权限才可执行。
内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。
linux 学习路径 📷 image.png linux 系统简介 文件结构 📷 📷 系统环境 📷 主要四个部分:内核、shell、文件系统、应用程序。 内核 内核部分普通用户是无法接触的。 📷 shell 用户一般通过shell 与内核交互, 📷 发行版本 📷 image.png 命令行命令格式 📷 image.png tar 命令(一个例子) 📷 image.png 文件夹与文件管理命令 📷 image.png ssh 远程连接终端 # templete : ssh user_name@host_id
本文需要接着系统调用,也是接着 $xv6$ 文件系统的最后一层,讲述各种具体的文件系统调用是怎么实现的,文件描述符,$inode$,文件之间到底有什么关系,创建打开关闭删除文件到底是何意义,文件删除之后数据就不存在了吗,链接又作何解释等等问题,看完本文相信你能找到答案。
本章的目的是编写一个完整的字符设备驱动,我们开发一个字符驱动是因为这一类适合大部分简单硬件设备,字符驱动也比块驱动易于理解。
Windows 基本占领了电脑时代的市场,商业上取得了很大成功,但是它并不开源,所以要想接触源码得加入 Windows 的开发团队中。
gvisor 是一个为容器设计的应用内核。该项目解决了在容器中运行不受信任或潜在恶意代码时缺乏额外隔离的问题。它通过实现大部分 Linux 系统接口,并提供一个名为 runsc 的 Open Container Initiative (OCI) 运行时,创建了应用程序与主机内核之间的隔离边界。runsc 运行时与 Docker 和 Kubernetes 集成,使得运行沙盒化容器变得简单。
随着微服务的盛行、自动化运维技术的发展,我们测试管理测试环境的能力似乎在逐渐降低,而整个IT行业对于“W”型人才的需求确越来越高。作为一个有追求的测试,我们是时候补一补我们的运维知识~
以前我们学习的过程中,进程是具有独立性的。但有些时候需要多个进程进行协同,这时候就需要进程间的通信来保证信息的互通。
网上类似标题的文章很多,但大都是从start_kernel讲起,我觉得这是远远不够的。
Docker通过namespace(命名空间)实现资源隔离。Namespace是Linux系统提供的资源隔离机制,只有在同一个namespace下的进程可以互相联系,但无法感受外部进程的存在,从而实现资源隔离。
通常我们使用的磁盘和光盘都属于块设备,也就是说它们都是按照 数据块 来进行读写的,可以把磁盘和光盘想象成一个由数据块组成的巨大数组。但这样的读写方式对于人类来说不太友好,所以一般要在磁盘或者光盘上面挂载 文件系统 才能使用。那么什么是 文件系统 呢? 文件系统 是一种存储和组织数据的方法,它使得对其访问和查找变得容易。通过挂载文件系统后,我们可以使用如 /home/docs/test.txt 的方式来访问磁盘中的数据,而不用使用数据块编号来进行访问。
Android是基于Linux开发性内核的操作系统,该平台由操作系统,中间件,用户界面和应用软件组成。Android的基本信息:软件类型,APK,发行商:Google,最早版本 Android 1.0 ,最新版本 Android 8.0 (年头:2017年) ,安卓内核类型:整块性核心(Linux)。
函数状态涉及到: esp, ebp, eip esp 存储函数调用栈的栈顶地址 ebp 存储当前函数状态的基地址 eip 存储下一条执行的指令的地址
mmap(memory map)即内存映射,用于将一个文件或设备映射到进程的地址空间,或者创建匿名的内存映射。
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
有趣有内涵的文章第一时间送达! 📷 Android是什么? Android是基于Linux开发性内核的操作系统,该平台由操作系统,中间件,用户界面和应用软件组成。Android的基本信息:软件类型,APK,发行商:Google,最早版本 Android 1.0 ,最新版本 Android 8.0 (年头:2017年) ,安卓内核类型:整块性核心(Linux)。 提供Android学习者有用的网络资源 Android Studio2.0 教程从入门到精通Windows版 - 安装篇 http://www.op
关于Linux详细介绍可以参见:http://blog.csdn.net/hguisu/article/details/6122513 关于Linux的常用命令可以参见:http://blog.csdn.net/xiaoguaihai/article/details/8705992 【Linux】Linux中常用操作命令 1、Linux操作系统的安装 目前基本上都是基于windows操作系统上的安装,在安装在windows上搞得虚拟机上加载安装Linux系统,主要有CentOS(企业服务用这个比较多)
索引节点(inode)是持久化存储到磁盘中的,而目录项(dentry)是由内核维护(目录项缓存)的。
Docker容器本质上是宿主机上的进程。Docker通过namespaces实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。
Socket编程进行的是端到端的通信,基于网络层和传输层的实现。在网络层,Socket 函数需要指定到底是 IPv4 还是IPv6。传输层需要指定是tcp还是udp。 基于TCP协议的socket调用过程:
上一节说过设备树的出现是为了解决内核中大量的板级文件代码,通过 DTS 可以像应用程序里的 XML 语言一样很方便的对硬件信息进行配置。关于设备树的出现其实在 2005 年时候就已经在 PowerPC Linux 里出现了,由于 DTS 的方便性,慢慢地被广泛应用到 ARM、MIPS、X86 等架构上。为了理解设备树的出现的好处,先来看下在使用设备树之前是采用什么方式的。
文件系统是操作系统的重要组成部分,是对文件的组织管理,本文就主要讲述磁盘上的文件是如何组织的和文件操作两个部分,废话不多说直接来看。
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示:
在讲 overlay2 之前,我们需要先简单了解下什么是 rootfs: rootfs 也叫 根文件系统,是 Linux 使用的最基本的文件系统,是内核启动时挂载的第一个文件系统,提供了根目录 /,根文件系统包含了系统启动时所必须的目录和关键性文件,以及使其他文件系统得以挂载所必要的文件。在根目录下有根文件系统的各个目录,例如 /bin、/etc、/mnt 等,再将其他分区挂载到 /mnt,/mnt 目录下就有了这个分区的各个目录和文件。
mmap是linux操作系统提供给用户空间调用的内存映射函数,很多人仅仅只是知道可以通过mmap完成进程间的内存共享和减少用户态到内核态的数据拷贝次数,但是并没有深入理解mmap在操作系统内部是如何实现的,原理是什么。
原文链接:https://rumenz.com/rumenbiji/linux-etc.html
长时间运行的Linux服务器,通常 free 的内存越来越少,让人觉得 Linux 特别能“吃”内存,甚至有人专门做了个网站 LinuxAteMyRam.com解释这个现象。实际上 Linux 内核会尽可能的对访问过的文件进行缓存,来弥补磁盘和内存之间巨大的延迟差距。缓存文件内容的内存就是 Page Cache。
该文章介绍了如何通过Linux内核技术实现一个基于ARM SoC的通用驱动程序,该驱动程序可以支持多种外设如LED、按键、喇叭等。首先介绍了Linux内核的树状结构和通用驱动程序涉及到的关键组件,如驱动程序加载、设备管理、中断处理、队列和调度等。然后详细讲解了如何创建一个通用的驱动程序框架,该框架可以支持多个外设,如LED、按键、喇叭等。最后,介绍了如何通过修改测试程序来点亮LED,并通过一个简单的示例来展示通用驱动程序的效果。
在 Linux 系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,也就是大家常说的“一切皆文件”。
上周在做日志机扩容的时候,发现运维同学将一块硬盘的挂载点没有同以前的日志机保持一致,考虑到这会给日后的维护带来麻烦,于是尝试着手修改,在修改的同时,review 了下之前日志机的挂载配置,发现居然存在随时掉坑的可能。。。至于什么坑,我会在文末说明。 so,感觉这事儿虽然简单,也许一条命令就搞定的事情,但是,很多童鞋可能不明就里,纯复制粘贴网上的命令,这很容易给人挖坑埋雷,今天就来聊聊 linux 下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普吧~ 1、Linux 分区简介 1.1
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现了文件磁盘地址和进程虚拟地址的映射关系。实现映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示:
Docker 是一个供软件开发人员和系统管理员使用容器构建、运行和与分享应用程序的平台。容器是在独立环境中运行的进程,它运行在自己的文件系统上,该文件系统是使用 docker 镜像构建的。镜像中包含运行应用程序所需的一切(编译后的代码、依赖项、库等等)。镜像使用 Dockerfile 文件定义。
前面两篇分别探究了 docker 的底层架构和 docker 的容器隔离机制,那么本篇就来一探 docker 是如何实现多文件联合系统的!!!
本人菜鸡一枚,这里对docker底层原理也只是简单的描述了一下,想要深入研究的小伙伴,建议可以看其他文章
Linux系统目录树结构 📷 img etc etc不是什么缩写,是and so on的意思 来源于 法语的 et cetera 翻译成中文就是 等等 的意思. 至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(linux文件结构参考UNIX的教学实现MINIX) 这下面放的都是一堆零零碎碎的东西, 就叫etc, 这其实是个历史遗留. 目录 描述 /etc/rc /etc/rc.d/etc/rc*.d 启动、或改变运行级时运行的scripts或scripts的目录. /etc/hosts 本
在LINUX系统中有一个重要的概念:一切都是文件。 其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
缘起:之前给别人提供的SDK都是在Linux下使用Qt搭建的,但是最近有客户不使用Qt,而是需要在Linux下使用cmake进行进行文件组织。于是我就进行谷歌,现在将可用的程序记录下来。
1.文件描述符 ---- linux下的文件描述符是一个用于表述指向文件的引用的抽象化概念(在windows下是HANDLE句柄). 文件描述符在形式上是一个非负整数值.但实际上,他是一个索引值,指向系统内核为每个进程维护的一张记录表. 在这张记录表上记录每个进程打开的文件对应的文件结构体信息. 那么也就是说,文件描述符不存在事件这一说法,文件描述符本身不会产生事件,但文件描述符对应的文件可能会因为modify而产生事件. 这些事件是怎么产生的,由谁产生的,怎样让epoll捕捉到此事件.都是系统在对事
最近在看一本 Linux 环境编程的书,加上之前工作中接触了一些关于存储的东西,便突然有兴趣整理一下 Linux 是怎么支撑文件系统的。
Linux和UNIX的文件系统是一个以“/ “为根的阶层式的树状文件结构,/ 因此被称为根目录。所有的文件和目录都置于根目录/ 之下。根目录/下面有/bin,/home,/usr等子目录。在早期的UNIX系统中,各个厂家各自定义了自己的UNIX系统的文件系统构成,比较混乱。
本篇文章晚了两三天发,说明一下原因哈,最近在搞TSRC和青藤云的webshell挑战赛,时间被挤压了,文章会晚到,但不会缺席,继续今年的Flag。突然发现写完凌晨三点了,赶紧睡觉。。。
领取专属 10元无门槛券
手把手带您无忧上云