作者简介: 王建峰,对于技术方向(主要是嵌入式领域的OS方向的系统应用)感兴趣,最近在学习操作系统基础。同时也是某芯原厂的驱动工程师,主要是gpu领域的驱动软件。https://gitee.com/hinzer/blog 1 概念介绍 1.1 什么是操作系统? 1.2 如何理解中断机制? 1.3 如何理解系统定时? 1.4 如何理解进程控制? 1.5 如何理解内存管理? 1.6 如何理解堆栈概念? 1.7 内核在源码中的体现? 1.8 如何理解系统调用? 1.9 如何理解特权级? 2 流程分析 2.1 引导
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/50575588
上节 从一个简单的汇编程序学习汇编程序的结构以及编译链接的过程中,打印hello world的汇编程序的详细解释为:
不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统。我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识。不论是为了满足程序员们自带的成就感,还是为了面试找工作时能更深入地和面试官探讨(装逼)。
键盘,咱们做计算机这一行的自然不必多说,天天与它打交道。但熟归熟,清楚键盘背后的原理吗?键盘上都标有各键的名称,表明了各键所代表的意义,但是计算机是如何知道的?组合键是怎样实现的?按下一个代表字符的键,怎么变成平常使用的ASCII码的?
本周特推选取了一个画风有点意思的 Linux 代码带读项目 flash-linux0.11-talk,希望有趣的文风能带你读完 Linux 代码。当然画风可以增加阅读体验,彩色标记也是一种学习方法——annotated_latex_equations 手把手教你学各种各样彩色的公式注释,那色彩就像是 GitHub 移动端新支持的快捷键功能的配色,非常的赞。
本文以linux0.11版本为基础,分析进程的内存布局,现代版本已经发生比较大的变化,都是很多原理都是类似的。 系统维护了一个全局的数据结构叫GDT( Global Descriptor Table),他保存了所有进程的代码段数据段的一些信息。系统有专门的寄存器保存了GDT的地址,叫GDTR。GTDR的格式如下。
大家好,今天给大家分享一下我个人学习Linux内核的总结,由于新的内核版本太过于庞大,说实话,啃不动,然借鉴前人的建议,故开始从早期的Linux0.11版本开始学习。
觉得挺有意思的,所以顺手回答了下,同时也发到我的公众号上来,这篇文章纯碎是记流水账,也没什么干货。
所以idt的内容是一个单位是8字节,长度是256的数组。linux0.11分为中断、系统、陷阱门。系统在启动的时候设置idt。
本文讲解系统的进程管理相关内容,系统的进程管理是有关系统的所有进程的调度、排序、分配资源、创建、销毁等,是比较重要的内容。
这一篇大致说一下进程的创建,有兴趣的可以参考之前的一些文章或者直接上代码https://github.com/theanarkh/read-linux-0.11。
之前想过写这篇文章,但是没有想到一个好的内容、好的突破点。在《GitHub 漫游指南》指南里,我们提到过《如何在GitHub“寻找灵感(fork)”》,但是并不是关于阅读源码的好文章。 我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是: clone某个项目的代码到本地 查看这个项目的release列表 找到一个看得懂的release版本,如1.0或者更早的版本 读懂上一个版本的代码 向后阅读大版本的源码 读最新的源码 最好的在这个过程中,可以自己造轮子来实现一遍。 阅读过程 在我阅读的前端库、P
近日,关于手机计算器10%+10%=0.11的事情火热,多个品牌的手机未能幸免,基本“阵亡”,同时还包括了windows10的自带标准计算器。你的手机阵亡了吗?
linux的信号处理时机在系统调用结束后。这里以fork系统调用函数为例子讲解这个过程。下面是fork函数的定义。
操作系统的定时器原理是,操作系统维护了一个定时器节点的链表,新增一个定时器节点时,设置一个jiffies值,这是触发定时中断的频率。linux0.11版本里是1秒触发100次,即10毫秒一次。加入新增一个定时器的jiffies值是2,那经过两次定时中断后就会被执行。jiffies值在每次定时中断时会加一。
链接: https://pan.baidu.com/s/1wtec1_UlBA1wxwNeMyFBOw 密码: 7j1l
在 “Linux 发布 5.1, Linux Lab 同步支持” 一文中,首次得知了 Linux 移除 a.out 格式的消息,这个消息着实令人感叹,因为 a.out 伴随 Linux 的诞生至今在 Linux 中有将近 ~28 年的历史,而 a.out 本身则要追溯到更早的 Unix 时代。
各位,你们没有看错,现在是2021年,vue3.0都已经出来很长一段时间了,而本系列将要带各位阅读的是0.11版本,也就是vue最早的正式版本,发布时间大概是六七年前,那时,嗯,太久远,都忘了我那时候在干什么,原因是2.0和3.0已经是一个很完善的框架了,代码量也很大,作为一个没啥源码阅读经验的老菜鸟,我不认为我有这个能力去看懂它,但同时又很想进一步的去看看它的真面目,思来想去,有两种思路,一是找到2.0或3.0的最早提交版本,然后一步一步的看它新增了什么,二是看它的早期版本,众所周知,早期版本一般都比较简单,最后决定先拿最早的版本练练手。
在文章开始之前,请各位先回忆下在日常开发过程中,都使用或依赖了哪些开源项目?是不是发现,开源项目已经完全融入到日常开发!
本次实验是在Ubuntu 20.04下进行的。首先是bootsect.s代码。如下所示:
因为spark的群起命令会和hdfs的命令冲突,所以spark执行命令时使用绝对路径。
想写一个系列的文章,逐步介绍文件系统的实现原理。采用的是linux0.11版本。这是第一篇文章。首先介绍一下文件系统的基础数据结构。这是后面的基础,需要先熟悉。所谓数据结构决定算法。
json-c是c语言下的json库 , 如果在centos6下可以访问下面这个页面找到64位的rpm包 , 一定要看清是4位还是32位
第一种方法纵向或者横向来读都可以,因为代码量不是很大。《linux内核完全剖析》《linux内核完全注释》是引导你横向阅读的书,《linux内核设计的艺术》是引导你纵向阅读的书。建议横向纵向结合着来,纵向跟着bochs调试工具来是必不可少的,当遇到问题时进入到相应的功能模块横向拓展一下。
在执行sys_fork的时候,可能会引起切换,例如: 如果产生了阻塞或者时间片到期了
最近逛开源社区,发现一个开源项目 flash-linux0.11-talk 把学习操作系统源码,写成了一部小说,把内核当小说看,挺爽的。
通常,我们运维管理人员需要知道一台服务器上有哪些用户登录过,在服务器上执行了哪些命令,干了哪些事情,这就要求记录服务器上所用登录用户的操作信息,这对于安全维护来说很有必要。废话不多说了,下面直接记录做法: 1)查看及管理当前登录用户 使用w命令查看当前登录用户正在使用的进程信息,w命令用于显示已经登录系统的用户的名称,以及它们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括: -> 用户名称 -> 用户的机器名称或tty号 -> 远程主机地址 -> 用户登录系统的时间
在学校的时候泛泛读过一遍 apue,其中的部分知识只是有个大概印象,其实我个人对底层技术还是有热情和追求的 哈哈,打算把经典的书籍结合遇到的场景重读一遍,先拿 Linux 文件系统练习下。代码参考的是Linux早期的代码,没有现代内核的高级特性,VFS这部分只有介绍。
进程的地址有三种,分别是虚拟地址(逻辑地址)、线性地址、物理地址。在分析之前先讲一下进程执行的时候,地址的解析过程。在保护模式下,段寄存器保存的是段选择子,当进程被系统选中执行时,会把tss和ldt等信息加载到寄存器中,tss是保存进程上下文的,ldt是保存进程代码和数据段的首地址偏移以及权限等信息的。假设当前执行cs:ip指向的代码,系统根据ldt的值从gdt中选择一个元素,里面保存的是idt结构的首地址。然后根据cs的值选择idt表格中的一项,从而得到代码段的基地址和限长,用基地址加上ip指向的偏移得到一个线性地址,这个线性地址分为三个部分,分别是页目录索引,页表索引,物理地址偏移。然后到页目录吧和页表中找到物理地址基地址,再加线性地址中的偏移部分,得到物理地址。下面我们看看这些内容是怎么设置的,使得执行的时候能正确找到我们想要的地址去执行代码。我们从fork函数开始。到进程被调度执行时所发生的事情。fork函数的具体调用过程之前已经分析过。下面贴一下主要的代码。
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
[注: 转载自今日头条号"闪念基因"] 在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘。这里提到的脏页(dirty page)即为页缓存(page cache)。
纵观国内技术圈,似乎大家都特别热衷于在一些应用层技术和概念上折腾。但飞哥却坚持认为应该分一些精力来扎扎实实地提升对底层的理解。
在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘。这里提到的脏页(dirty page)即为页缓存(page cache)。
本文对内核中断进行概括以及讲述中断的具体实现方法在内核是怎么做的,会结合内核源码中的一些 .s 文件和 .c 文件来具体分析一下内核在中断中的实现方式。
简单地说就是管理员。有什么事它就会通知到所有被它管理的人。就比如宿舍管理员,宿舍要停电他就会发通知,然后所有住这栋楼的都会知道。说专业一点,它是由文件系统和通知机制组成的。
摘要: golang 协程 资源占有 GO版本:go version go1.4.2 linux/amd64 测试环境: [root@localhost mpro]# more /proc/cpuinfo | grep "model name"model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name :
iostat主要用于监控系统设备的IO负载情况,iostat提供了丰富的参数给我们查询各种维度的io数据, iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
因为vue指令很多,功能也很多,所以会有很多针对一些情况的特殊处理,这些逻辑如果不是对vue很熟悉的话一时间是看不懂的,所以我们只看一些基本逻辑。
前面给大家简单介绍了R中的stack和unstack函数。今天给大家举一个真实的案例,就是在单细胞数据分析过程中,如何将挑选到的marker基因转换成表格的形式写出到csv文件中,方便后面对每一个细胞亚群进行注释。 一般做完细胞亚群差异表达分析后得到的结果如下
有一点需要注意的是:CMS并发GC不是“full GC”。HotSpot VM里对concurrent collection和full collection有明确的区分。所有带有“FullCollection”字样的VM参数都是跟真正的full GC相关,而跟CMS并发GC无关的,cms收集算法只是清理老年代。
作者:这是上帝的杰作 链接:https://zhuanlan.zhihu.com/p/344110917
如果需要多个进程合作来完成某个任务,那个可能会存在资源争用或者其他一些意想不到的问题,这个时候,就需要通过实现进程同步来防止问题的产生。
监控系统状态 iostat -x 磁盘使用 iotop 磁盘使用 查看磁盘使用情况 在运维工作中,除了查看CPU和内存之外,磁盘的io也是非常重要的一个指标 有时候,CPU和内存有内存,但系统负载就是很高,我们用vmstat命令查看到 b 列或者是 wa 列 较大,这时候就说明磁盘有瓶颈,那么我们就需要更详细的查看磁盘的状态 iostat命令 iostat命令,在查看系统输入输出设备和CPU的使用情况 在安装 sysstat 这个包的时候,就会安装上iostat命令 iosta t和 sar 属于同一
上一次我们说到了文件的常规操作,打开,读,写,关闭这些,重点在于打开是以什么样的方式来打开,包括文件的权限,内容是否清空,打开不存在的文件等等情形。今天继续说一下文件IO操作。
假设这里文件在磁盘上都是连续存放的,此时有一个test.c文件,占据了6,7,8三个盘块的位置。
linux 常用命令,在学习鸟哥的时候一起记录下来的,这样也方便建立自己知识的索引。最后附一个带中文注释的常用。
领取专属 10元无门槛券
手把手带您无忧上云