自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (7)
  • 收藏
  • 关注

原创 CFS 调度器数据结构篇

在上一节我们了解了CFS的设计原理,包括CFS的引入,CFS是如何实现公平,CFS工作原理的。本小节我们重点在分析CFS调度器中涉及到的一些常见的数据结构,对这些数据结构做一个简单的概括,梳理各个数据结构之间的关系图出来。调度类CFS调度器是在Linux2.6.23引入的,在当时就提出了调度类概念,调度类就是将调度策略模块化,有种面向对象的感觉。先来看下调度类的数据结构,调度类是通过str...

2020-02-28 18:53:05 913

原创 CFS Scheduler(CFS调度器)

前面我们分享了O(n)和O(1)调度器的实现原理,同时也了解了各个调度器的缺陷和面临的问题。总的来说O(1)调度器的出现是为了解决O(n)调度器不能解决的问题,而O(1)调度器在Linux2.4内核的在服务器的变形是可行的,但是Linux2.4以后随着移动设备的逐渐普遍,面临的卡顿问题逐渐明晰,这才导致后来的CFS调度器的出现。今天我们来学习CFS调度器,再分析代码之前,我们可以先看下内...

2020-02-27 18:15:21 1878

原创 Linux O(1)调度器

前面我们学习了O(n)调度器的设计,以及它的核心算法。在这里复习下。O(n)调度器核心:O(n)调度器采用一个runqueue运行队列来管理所有可运行的进程,在主调度schedule函数中会选择一个优先级最高,也就是时间片最大的进程来运行,同时也会对喜欢睡眠的进程做一些补偿,去增加此类进程的时间片。当runqueue运行队列中无进程可选择时,则会对系统中所有的进程进行一次重新计算时间片的操...

2020-02-23 13:11:07 1139

原创 Linux O(n)调度器

前面我们学习了调度器的设计需要关注的几个点,在这里复习下:吞吐量(对应的是CPU消耗型进程) 响应速度(对应的是IO消耗型进程) 公平性,确保每个进程都可以有机会运行到 移动设备的功耗Linux中调度器的设计,引入的概念普通进程和实时进程使用优先级区分,0-99表示实时进程,100-139表示普通进程 实时进程采用两种调度策略SCHED_RR或者SCHED_FIFO 普通进程采...

2020-02-21 18:32:08 847

原创 进程调度开篇

在前面的几篇文章中,我们重点分析了如果通过fork, vfork, pthread_create去创建一个进程或者线程,以及后面说了在内核层面do_fork的实现。目前为止我们已经了解到一个进程是如何创建的。既然创建了一个进程,那这个进程肯定要去运行,执行它的使命。而进程何时被执行,在计算机系统中需要调度器来选择。所以我们从今天要开启一系列调度相关的知识了。为何要有调度器计算机设...

2020-02-20 18:32:40 458 1

原创 do_fork实现--下

昨天在do_fork实现–上中学习了do_fork创建的前半段,今天我们接着继续分析copy_Process函数分析了copy_fs, copy_files, copy_signal, copy_sighand, copy_mm,今天接着分析copy_thread, copy_thread是和架构相关的,需要到具体的ARCH目录下去看在分析copy_thread之前,我们先看几个知识...

2020-02-19 20:14:49 1125

原创 do_fork实现--上

在前面几节中讲述了如何通过fork, vfork, pthread_create去创建一个进程,或者一个线程。通过分析最终fork, vfork, pthread_create最终会通过系统调用clone去创建进程。今天我们就重点来分析clone之后的事情。为了学习今天这一节,前面的都是铺垫。既然fork, vfork, pthread_create都去调用到clone这个系统调用,...

2020-02-18 20:06:05 535

原创 Linux0号进程,1号进程,2号进程

本节我们将从linux启动的第一个进程说起,以及后面第一个进程是如何启动1号进程,然后启动2号进程。然后系统中所有的进程关系图做个简单的介绍0号进程0号进程,通常也被称为idle进程,或者也称为swapper进程。0号进程是linux启动的第一个进程,它的task_struct的comm字段为"swapper",所以也成为swpper进程。#define INIT_TASK_CO...

2020-02-17 20:07:26 8365 6

原创 ThreadInfo结构和内核栈的两种关系

本来本节是要学习内核启动的第一个进程的建立,也就是0号进程,也称idle进程,也称swapper进程。但是在学习第一个进程建立之前需要先学习threadinfo和内核栈的关系。目前内核存在两种threadinfo和内核的关系,接下来我们通过画图一一举例说明。ThreadInfo结构在内核栈中Threadinfo结构存储在内核栈中,这种方式是最经典的。因为task_struct结构...

2020-02-16 18:53:19 2448 4

原创 僵尸进程

之前在第一节进程的基本概念中讲到进程的状态的时候,提到进程的状态中存在一个僵尸状态。今天我们重点来分析下什么是僵尸进程,僵尸进程是如何产生的,以及僵尸进程如何灭掉,僵尸进程产生的原理。先来看一个在之前遇到的例子:Tasks: 779 total, 6 running, 753 sleeping, 0 stopped, 20 zombie Mem: 7.3G total, 6....

2020-02-15 17:59:34 629

原创 线程的创建以及线程的本质

上节详细学习了进程的创建,通过实例学习了fork和vfork的区别。本节将学习线程的创建,只涉及应用层的线程,内核线程的创建在后面学习。应用线程的创建应用线程的创建,想必大家都有所了解。使用pthread_create库函数来创建应用线程。通过一个简单的例子来看下。我们先来看下pthread_create的参数,通过man pthread_createNAME pt...

2020-02-14 15:44:00 871

原创 进程的创建fork vs vfork

上一篇文章学习了进程的基本概念,以及进程的状态,最后学习了Linux中是如何描述一个进程的。本节来学习Linux中进程是如何创建的,以及fork和vfork的区别。在大学的时候操作系统课程中我们都学过如何去创建一个进程,是通过fork系统调用命令来创建的。使用fork创建进程如下是一个简单的通过fork系统调用来创建子进程的例子#include <stdio.h&gt...

2020-02-12 18:13:12 797

原创 进程的基本概念

本系列文章将重点学习分析进程的相关内容,包括进程的基本概念,进程的创建,fork,vfork,clone等系统调用是如何创建进程的,linux内核是如何描述一个进程的,以及进程的调度算法学习,比如CFS调度算法等相关内容。其中前提的准备工作:以linux5.0内核代码为基础学习 以ARM64架构来实践学习过程中会通过实践+阅读内核源代码+图文并茂的方式来呈现进程管理的相关内容。为什...

2020-02-11 19:55:13 301

原创 2020年学习规划

时隔两年已经没有写文章了,在这两年中收获了很多,但是发现到用的时候总是想不起来,所以打算从2020年开始继续培养写文章的好习惯。2020年过年刚好赶上了肺炎,一下子在家呆了快一个月了。在家实在无聊的时候翻阅了前几年买的Linux内核书籍,突然发现以前看不懂的内容突然可以看懂了,以前不理解的知识点,现在居然恍然大悟。所以下定决心,需要在2020年,再次踏上学习linux内核的道路。虽然学习li...

2020-02-07 11:16:37 703 3

ARMGIC手册详解.zip

Support for: — The ARMv8 architecture. — Locality-specific Peripheral Interrupts (LPIs). — Private Peripheral Interrupts (PPIs). — Software Generated Interrupts (SGIs). — Shared Peripheral Interrupts (SPIs). — Interrupt masking and prioritization. — Uniprocessor and multiprocessor systems. — Wakeup events in power management environments.

2020-03-21

ARM_v8_architecture参考手册.zip

对ARm各个子系统都有一个简单的描述,很适合初学者。 This book provides a single guide for programmers who want to use the Cortex-A series processors that implement the ARMv8 architecture. The guide brings together information from a wide variety of sources that is useful to both ARM assembly language and C programmers. It is meant to complement rather than replace other ARM documentation available for ARMv8 processors. The other documents for specific information includes the ARM Technical Reference Manuals (TRMs) for the processors themselves, documentation for individual devices or boards or, most importantly, the ARM Architecture Reference Manual - ARMv8, for ARMv8-A architecture profile - the ARM ARM.

2020-03-21

ARMv8-A_Architecture.zip

ARMv8, for ARMv8-A architecture profile ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile

2020-03-21

Dowland.zip

本文档是从网络上下载文件,并且支持断点续传,可以在界面上有进度条显示,同时还有进度比例

2015-08-11

介绍了汇编的第一个程序

介绍汇编下 如何用汇编语言写个程序! 以及masm 的如何使用. 以及一些问题

2012-11-04

Debug的使用教程

描述下8086下Debug的使用全过程!

2012-11-04

led驱动程序

本资源是关于ok6410下的led驱动程序!

2012-09-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除