笔者作为通信工程的学生,在学习这门课之前虽然会用Linux完成一些简单的任务,但却从没有接触过这个操作系统的内在之美。之前学完C语言的时候,就想认识这个神秘的Linux内核了,可是一直在数学建模和各种活动中抽不开身,学习的过程也是不得其法。直到我看到孟宁老师的《Linux内核分析》这门课时,我想我大概可以在二十年后吹牛了:“当年我大二,读Linux内核源码的时候.....” 只是在学习的过程中,没有找到合适的参考书,导致复习有些困难。到了第六、七周早早的把视频看完,周末想写博客的时候却记不起来了。与其参考别
先占个位置,在实验楼做实验,刚做完一半忘了延续时间,结果之前写的代码神马的全没了。让我先去角落哭会,总结明天再写。2015-04-04
第一种方法纵向或者横向来读都可以,因为代码量不是很大。《linux内核完全剖析》《linux内核完全注释》是引导你横向阅读的书,《linux内核设计的艺术》是引导你纵向阅读的书。建议横向纵向结合着来,纵向跟着bochs调试工具来是必不可少的,当遇到问题时进入到相应的功能模块横向拓展一下。
系统调用列表中可用的很多,可惜对用代码进行系统调用不太清楚,只好从网上窃取了一份,地址在最后放上。此处以fork()为例。
(1)进程状态转换的时刻:进程终止、进程睡眠,这些过程会主动调用调度程序进行进程调度。 (2)当前进程时间片用完时 (3)进程从中断、异常及系统调用返回到用户态时
以下关于fork()的描述来自于:jason314 首先,在Linux环境下,一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3)如果出现错误(如系统资源不足),fork
在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息
进程在内核态运行时需要自己的堆栈信息,linux内核为每个进程都提供了一个内核栈。对每个进程,Linux内核都把两个不同的数据结构紧凑的存放在一个单独为进程分配的内存区域中:
在操作系统运行过程中,由于CPU bound和I/O bound,进行进程的调度自然是常事。进行进程调度时,操作系统使用某些特定算法(如FIFO、SCBF、轮转法等)在进程队列中选出一个进程作为下一个运行的进程,调用schedule。进行进程调用的时机有以下几种: 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(); 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行
本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。
马马虎虎学完了Python课程,一直想学下linux,看到里面有个linux的就选上了。当初没细看,如今听完第一节课有点傻眼,竟然糊里糊涂给自己找了一科汇编语言的课程,静心看下去庆幸自己还知道点堆栈的知识并出现了轻微的自虐倾向。闲话少说,现开正题。注:本文具有总结兼作业性质,如有雷同,纯属巧合。
预处理:gcc -E -o hello.cpp hello.c -m32 (源代码)
因为图片比较大,压缩的比较厉害,所以很多细节都看不清了,我单独传了一份到github上,想要原版图片的,可以点击下方的链接,来访问github:
实验阶段,由于学校网速等条件限制,未能在真机上搭建出实验环境。在实验楼中,将代码粘贴进去出现严重的缩进错位,最终未能完成编译新的。本文以分析关键代码为主。
Java编程语言(第三版)—Java四大名著—-James Gosling(Java之父)
因为图片比较大,微信公众号上压缩的比较厉害,所以很多细节都看不清了,我单独传了一份到github上,想要原版图片的,可以点击下方的阅读原文,或者直接使用下面的链接,来访问github:
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看
现在网上的学习资料是真的丰富,我上大学时除了图书馆借书看之外很难看到自己想看的知识,羡慕现在的大学生可以在网上搜到海量的学习资料,甚至可以去听清华北大等名校教授的课程,这对自己的职业发展是非常有好处的。 我记得刚毕业的时候做嵌入式linux开发,市面上只能看韦东山和宋宝华等老师的书籍,遇到不理解的知识也很难找到人一起讨论,更不要说现在微信群里小伙伴们的学习。 现在只要你想学习某方面的知识,除了各种网站,书籍外还有很多的公众号自媒体分享自己的学习与经验,文字不够还可以去B站看名校里的名师授课。总之,你要你想学
1. 概述 ---- 当我们执行rm命令删除一个文件的时候,在操作系统底层究竟会发生些什么事情呢,带着这个疑问,我们在Linux-3.10.104内核下对ext4文件系统下的rm操作进行分析。rm命令本身比较简单,但其在内核底层涉及到VFS操作、ext4块管理以及日志管理等诸多细节。 2. 源码分析 ---- rm命令是GNU coreutils里的一个命令,在对一个文件进行删除时,它实际上调用了Linux的unlink系统调用,unlink系统调用在内核中的定义如下: SYSCALL_DEFINE1
今年是第一次参加COSCUP 开源人年会,到底与大家分享些什么,与社区大牛BOB沟通后,他建议我就分享自己这20年来的Linux内核之旅。
最早通过陈老师的分享认识了自成,没想到他也关注了【人人极客社区】,今天他给大家介绍一下xbook的昨天,今天和明天。
近年来,操作系统领域新闻频出,CentOS 8已经停止维护、HarmonyOS 3正式发布;深度(deepin)告别debian,打造自己的linux根社区…… 面对ePBF、ftrace等技术带来的变革汹涌袭来,面向未来的智能座舱、智能家居等设备也对操作系统提出了新的要求。操作系统技术与国产操作系统生态进入飞速发展期,那么: 操作系统方向的技术变革、产业发展和就业前景如何? 操作系统对于程序员来说究竟意味着什么? 是不是只有杰出的程序员才应该研究操作系统? 性能问题究竟有多重要? 领域大神们推荐大家读什么
如果您使用NVIDIA Visual Profiler或nvprof命令行工具,那么现在是时候转换到更新的工具了:NVIDIA Nsight工具。
你可能需要两种材料,课程视频和课件作业。前者在B站可以找到,后者的大部分在课程网站。然而,斯坦福把这个课从Cousera和自家的MOOC上撤掉了,我花了些时间才找到编程作业,在edx.org,不知道将来会不会把这个也撤了。
iOS的系统架构分为四个层次:核心操作系统层(CoreOS layer)、核心服务层(Core Services layer)、媒体层(Medialayer)和可触摸层(Cocoa Touch layer)。图1-1展示了Mac OS X和iOS系统架构层次的一个对比。
这篇文章我们来讨论一下Master的注册机制;那么有哪些信息需要注册到Master上面去呢?很简单,分别有Worker的注册,Driver的注册,Application的注册。明确了这个以后我们来看一张图;
Spark作业运行的集群环境有两种,分别基于standalone模式和Yarn集群模式。我们知道Yarn集群提供了HA来保证了集群的高可用,而standalone也提供了一种集群高可用的方法,即通过配置可以实现双master机制,保证在一个master挂掉以后,另外一个master立即启用。spark的主备切换提供了两种模式,一种是基于文件系统的,另外一种是基于zookeeper的。下面我们来看看spark集群的master主备切换是怎么实现的,如下图所示;
当向外界主机发送数据时,在它从网卡流入后需要对它做路由决策,根据其目标决定是流入本机数据还是转发给其他主机,如果是流入本机的数据,则数据会从内核空间进入用户空间(被应用程序接收、处理)。当用户空间响应(应用程序生成新的数据包)时,响应数据包是本机产生的新数据,在响应包流出之前,需要做路由决策,根据目标决定从哪个网卡流出。
Linux内核源码分析方法 一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码。通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更
大家周末好,本周给大家开始分享Linux内核系列的文章,Uboot的系列文章同时也更新。好了废话就不多说了,开始主题分享。
接着上一篇,我们接着来分析下一个非常重要的组建DAGScheduler的运行原理是怎么实现的;通过之前对Spark的分析讲解,我们的Spark作业是在遇到一个action算子以后并以此为界限,划分出一个Job出来,也就是在这个时候,Spark作业向集群提交一个Job任务;下面我们看看源码是如何实现的;
现在回首看看,接触Linux已经很长时间了。 在大三的时候开始学习Java, 但是一直学Java的话, 感觉有点腻, 就尝试找点其他东西来学习。 所以当时就选择学习了Linux。 至于为什么要学习Linux, 有以下三个原因。
倪继利著 2005年8月出版 ISBN 7-121-01518-5 900页 88.00元(估价)
接着上篇的Schedule调度内容,本篇我们来看看Driver,Application向Worker发送launch以后到底发生了什么。先来看看下面这张图;
Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心。我们应该在分析它的源代码之前学习好一些理论知识,下面就介绍一些与Android系统相关的资料。
上周,明尼苏达大学因提交“垃圾代码”做漏洞分析,被Linux内核社区拉黑一事,在网上吵得沸沸扬扬。
微信上收到一个读者的私信,他正在一所 985 高校读研,专业是机械工程,想转行做软件开发,问我该选择 C++ 还是 Java?
在下是一个码农,也号称是一个老湿,平生阅码农无数(吹牛的 ^-^)。经由大量的案例,我能够理解了为什么很多码农学了很多年Linux,还是感觉没有掌握要领,仍然内心崩溃,最终对Linux吐血而亡,正所谓:人世间最大的痛苦,莫过于,码农落花有意,而Linux流水无情.......
上一篇我们阐述了Driver,Application,Worker的注册实现原理,本篇我们来接着聊聊Driver,Application在注册之后是如何实现调度的。废话不多说,直接上源码进行分析(本篇所述内容比较重要,请耐心看完)。
操作系统堪称是IT皇冠上的明珠,Linux阅码场专注Linux操作系统内核研究, 它的文章云集了国内众多知名企业一线工程师的心得,畅销著作有《linux设备驱动开发详解 》等。
Linux 的内核源代码可以从网上下载,解压缩后文件一般也都位于linux目录下。内核源代码有很多版本,可以从linux0.01内核入手,总共的代码1w行左右,最新版本 5.9.8总共代码超过700w行,非常庞大.
原文地址:牛客网论坛最具争议的Linux内核成神笔记,GitHub已下载量已过百万
但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核专门的图书,都给人这样一种感觉,即 CFS调度器是革命性的,它将彻底改变进程调度算法。 预期中,人们期待它会带来令人惊艳的效果。
最近一直在忙,没顾得上写文章,新年的第一篇文章,希望大家可以喜欢;好了,今天接着之前的内容,来聊聊BlockManager的工作原理,上图来分析;
上一篇介绍了spark作业提交的三种方式,从本篇开始逐一介绍Spark作业运行流程中各个组件的内部工作原理。如标题所说,我们先来看看SparkContext在Spark作业提交后做了哪些事情,工作流程如下图所示;(注意:本篇文章及后续源码分析所有内容全部基于spark1.3.0源码进行分析,后续不再赘述)
原来明尼苏达大学华人教授K.J Lu带领的团队在向Linux内核提交补丁时,故意引入新的Bug,然后以此写论文。
领取专属 10元无门槛券
手把手带您无忧上云