
操作系统待整理内容
文章平均质量分 68
操作系统基本原理以及linux操作系统具体实现
生活需要深度
这个作者很懒,什么都没留下…
展开
-
系统哲理内容知识点,等待整理
1. 为什么需要调度进程调度的概念比较简单,我们假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列中等待,等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下,操作系统就需要从众多的就绪进程中选择一个最合适的进程来运行,这个就是调度器需要做的事情。作为一个通用的操作系统,需要兼顾各种类型的进程,包括交互式进程、批处理进程、实时进程等。其特征如下:交互式进程: 与人机交互的进程,例如鼠标、键盘、触摸屏等相关的应用,这类进程的特点是系统响应时间越原创 2022-04-16 12:49:23 · 1535 阅读 · 0 评论 -
RT-Thread实时操作系统简介
跨平台、芯片支持广泛,已经覆盖当前应用中的主流体系架构: ARM Cortex-M0/M0+, ARM Cortex-M3/M4/7, ARM Cortex-R4, ARM Cortex-A8/A9 ARM920T/ARM926 etc, MIPS32, x86,Andes,C-Sky, RISC-V, PowerPC。RT-Thread 内核采用面向对象的设计思想进行设计,系统级的基础设施都是一种内核对象,例如线程,信号量,互斥量,定时器等。动态内核对象则是从内存堆中创建的,而后手工做初始化。原创 2023-02-23 09:29:38 · 900 阅读 · 0 评论 -
理清gcc、glibc、libstdc++的关系
当然如果你写的是C++代码,还有两个库也要非常重视了,libc++/libstdc++,这两个库有关系吗?有。正在上传…重新上传取消。原创 2022-09-01 19:42:55 · 2242 阅读 · 0 评论 -
qemu与gdb内核调试环境搭建
调试环境基于韦东山系列开发板IMX6ull虚拟环境搭建,韦东山给了详细的教程。本篇文章主要是研究linux-4.9.88内核的基本架构,所以不对开发相关驱动进行太多的研究,所以整理出来的也是内核从编译到开发基本路径。环境基于Ubuntu18.04系统,可以通过VMware+Ubuntu的形式搭建环境,也可以直接使用独立的服务器Ubuntu进行。..................原创 2022-08-31 14:53:56 · 1793 阅读 · 0 评论 -
parse_cmdline详解
parse_cmdline的主要作用是用来解析命令行参数。 其实现原理:一个无穷循环,首先来查找第一个空格,如果找到,来空格之前的字符串是否与early_param相匹配,如果是,则通过实现的功能函数来找出其体参数。如果找到字串的末尾或cmdline的长度大于默认长度,则跳出循环。cmdline_p=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 rootfstype=yaffs, from=其定义在:arch/a...原创 2022-04-08 16:17:16 · 608 阅读 · 0 评论 -
__proc_info与__arch_info初始化
__proc_info与__arch_info1. lds链接文件arch/arm/kernel/vmlinux.lds文件给出了两个结构体变量在系统当中对应的组织位置,相应的实际实现的文件设计的重要结构体。.init : { /* Init code and data */ *(.init.text) _einittext = .; __proc_info_begin = .; *(.proc.info.init) __proc_info_end = .; __原创 2022-04-08 11:13:58 · 794 阅读 · 0 评论 -
Linux内存分析 - 准备知识
内核分析,不是做空洞的操作系统理论分析,而是基于某个特定的内核和单板进行分析。单板的硬件基本参数:DDR:64M MMU## Booting image at 30007fc0 ... Image Name: Linux-2.6.22.6 Created: 2022-04-07 11:42:07 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1850232 Byte原创 2022-04-07 20:49:13 · 252 阅读 · 0 评论 -
start_kernel()之lock_kernel()详解
start_kernel()函数主要完成操作系统前期的初始化工作,并打印相关的信息,然后然后创建init()内核进程(1号进程),最后进入idle()状态。事实上init()进程之前运行的代码,包括汇编的代码和start_kernel()函数都属于0号进程,这个0号进程也叫空闲进程或者启动进程。今天我们就主要start_kernel()函数的调用顺序开始讲解,也就是第一个调用的函数lock_kernel(),其代码如下:void __lockfunc lock_kernel(void){__i原创 2022-04-02 10:57:49 · 424 阅读 · 0 评论 -
local_irq_disable linux内核初始化
local_irq_disable的功能是屏蔽当前CPU上的所有中断,通过操作arm核心中的寄存器来屏蔽到达CPU上的中断,此时中断控制器中所有送往该CPU上的中断信号都将被忽略。#define local_irq_disable() \ do { raw_local_irq_disable(); trace_hardirqs_off(); } while (0)/** Disable IRQs*/#define raw_local_irq_disable() ...原创 2022-03-29 17:46:19 · 659 阅读 · 0 评论 -
start_kernel之lockdep_init Linux内核源码分析(六)
这个函数比较短,这里直接贴出来。void lockdep_init(void){undefined int i; /* * Some architectures have their own start_kernel() * code which calls lockdep_init(), while we also * call lockdep_init() from the start_kernel() its...原创 2022-03-29 17:39:57 · 225 阅读 · 0 评论 -
smp_setup_processor_id
紧跟参数后面的,就是调用函数smp_setup_processor_id()了,这个函数主要作用是获取当前正在执行初始化的处理器ID。如果仔细地阅读完初始化函数start_kernel,就会发现里面还有调用smp_processor_id()函数,这两个函数都是获取多处理器的ID,为什么会需要两个函数呢?其实这里有一个差别的,smp_setup_processor_id()函数可以不调用setup_arch()初始化函数就可以使用,而smp_processor_id()函数是一定要调用setup_arch(原创 2022-03-29 16:47:17 · 886 阅读 · 0 评论 -
启动最开始 linux内核
1.1、 stext分析:1.2.1、运行环境参数:1、首先注意一下,内核代码在进入C代码之前的几个重要文件:arch/arm/kernel/head.S:贯穿汇编执行阶段的始末,并且定义了最根本的参数;arch/arm/kernel/head-common.S:包括一些重要汇编子程序;arch/arm/mm/proc-XXX.S:汇编执行阶段关于内存(临时)页表、CPU缓存、MMU配置相关内容都在这里,非常重要,具体是哪个文件与设备平台相关;还有一些文件也很重要,只是它们和设备平台定.原创 2022-03-29 16:42:29 · 198 阅读 · 0 评论 -
MMUlinux内核开启
.2.5、打开MMU:接下来,调用__enable_mmu来打开MMU,在该函数的最后会使用这里保存在R13中的__switch_data函数地址并调用它,函数__switch_data定义在head-common.S中,它的函数指针__mmap_switched最终会调用第一个C函数start_kernel!ldr r13, __switch_data @ address to jump to after ...原创 2022-03-29 16:37:24 · 894 阅读 · 0 评论 -
FIFO - linux内核数据结构
Linux kernal 鬼斧神工,博大精深,让人叹为观止,拍手叫绝。然匠心独运的设计并非扑朔迷离、盘根错节,真正的匠心独运乃辞简理博、化繁为简,在简洁中昭显优雅和智慧,kfifo就是这样一种数据结构,它就是这样简约高效,匠心独运,妙不可言,下面就跟大家一起探讨学习。一、kfifo概述本文分析的原代码版本 2.6.32.63 kfifo的头文件 include/linux/kfifo.h kfifo的源文件 kernel/kfifo.c kfifo是一种"First原创 2022-03-28 11:16:45 · 1024 阅读 · 0 评论 -
Linux内核编译流程
首先加压开发过程自带的内核包,然后减压并打补丁,将厂家给的配置文件config_ok复制成为.config,最后执行make命令完成内核编译。减压和打补丁功能不多过多的描述,对于系统具体支持的模块进行配置。配置方式除了使用自己的方式,还可以通过make menuconfig看有配置界面出来,进行相应的配置。最后进行编译。tar jxf linux-2.6.22.6.tar.bz2patch -p1 < ../package/linux-2.6.22.6_jz2440.patchcp con.原创 2022-03-26 16:00:46 · 3414 阅读 · 0 评论 -
linux内核启动流程
本文以Linux3.14版本源码为例分析其启动流程。各版本启动代码略有不同,但核心流程与思想万变不离其宗。内核映像被加载到内存并获得控制权之后,内核启动流程开始。通常,内核映像以压缩形式存储,并不是一个可以执行的内核。因此,内核阶段的首要工作是自解压内核映像。内核编译生成vmliunx后,通常会对其进行压缩,得到zImage(小内核,小于512KB)或bzImage(大内核,大于512KB)。在它们的头部嵌有解压缩程序。通过linux/arch/arm/boot/compressed目录下的Ma原创 2022-03-26 11:53:56 · 1998 阅读 · 0 评论