操作系统
文章平均质量分 51
公众号:程序芯世界
这个作者很懒,什么都没留下…
展开
-
死锁
因为最近在看APUE的多线程里面有讲到死锁,而且操作系统也在讲死锁的概念,就在此总结一下,后续还会陆续的添加1.死锁的定义 系统中存在的一组进程,它们中的每一个进程都占用了某种资源而而又都在等待着其中的另一个进程所占用的资源而无限期的僵持下去的局面。2.死锁的根本原因 系统能提供的资源个数比要求该资源的进程数要少。3.死锁产生的必要条件 (1)互斥条原创 2014-12-23 17:21:35 · 423 阅读 · 0 评论 -
linux临时页表初始化
漫长而黑暗的史前时代终于到了setup。在setup汇编函数中,linux通过设置cr0寄存器的PE位(从实模式切换到保护模式)完成了史前文明到现代文明的转变。在setup时期,linux已经了解到世上可用的内存资源远远不止1MB。此时linux的欲望开始膨胀,最为满足它欲望的第一步,它开始抢占内存资源的前8MB。初始化临时内核页表是在startup_32汇编语言函数中完成的。在ULK所述中,转载 2017-04-04 11:25:44 · 891 阅读 · 0 评论 -
GDT、LDT详解
一、引入保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引段寄存器PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段。二、详解先说明转载 2017-04-30 10:44:47 · 1348 阅读 · 0 评论 -
前台进程,会话,控制终端,用户的关系
前台进程,会话,控制终端,用户的关系1、 一个会话和一个控制终端一一对应2、 一个控制终端对应一个前台进程组3、一个会话拥有一个前台进程组和若干后台进程组4、 会话中的所有进程都对应同一个控制终端5、 只有前台进程可以read write控制终端6、 控制终端收到一些特殊的信号字符,会发送相应的信号给前台进程组的进程7、 控制终端退出或者控制进程转载 2017-04-06 20:34:27 · 634 阅读 · 0 评论 -
任务状态段TSS
任务状态段不要被名字所吓倒,它不过是一块位于内存中的结构体而已。有一点需要注意的是,不要把它和任务切换关联起来(切记),否则你会被搞晕,它只是位于内存中的一段数据。Intel 白皮书给出TSS在内存中的图是这样的,它保存了一些重要的值。 抽象成结构体就是下面这个样子。typedef struct TSS { DWORD link; // 保存前一个 TSS转载 2017-05-02 15:28:42 · 1392 阅读 · 0 评论 -
FPU、MMX、SSE
FPU: 8个80位浮点寄存器(数据),16位状态寄存器,16位控制寄存器,16为标识寄存器。 使用FPU指令对这些寄存器进行操作,这些寄存器构成一个循环栈,st7栈底,st0栈顶, 当一个值被压入时,被存入st0,原来st0中的值被存入st7MMX: 将8个FPU寄存器重命名为8个64位MMX寄存器,即mm0到mm7。 57条MMX指令,加快了整形浮点运算转载 2017-04-20 10:09:17 · 1001 阅读 · 0 评论 -
nasm汇编中的宏定义
最近看orange’s 一个操作系统的实现,发现nasm中的宏汇编不是很清楚,在此详细记录一下256 %macro Descriptor 3258 dw %1 & 0FFFFh ; 段基址1 257 dw %2 & 0FFFFh ; 段界限1 259 db (%1>>16) & 0FFh ; 段基址2260 dw ((%2>>8) & 0F00h) | (%3 & 0F0FFh) ;原创 2017-05-27 10:08:07 · 3277 阅读 · 0 评论 -
Implementing a new real-time scheduling policy for Linux
Implementing a new real-time scheduling policy for Linux: Part 1Paulo Baltarejo Sousa and Luis Lino Ferreira, Polytechnic Institute of Porto7/26/2010 1:42 PM EDTModifying any part of the Linux kernel ...转载 2018-02-12 19:20:08 · 653 阅读 · 0 评论 -
make降级
一、问题背景Ubuntu 15.04以上的make版本都已经是4.0+,官方目前推荐的编译环境还是基于Ubuntu 14.04,虽然15.04以上也是可以编译的,但是MTK的某些平台会编译通过。二、如何更新make?1、下载make 3.81 make工具的官方镜像地址:http://ftp.gnu.org/gnu/make/ ,下载指定版本的make源码包,这里我们下载make-3.81.tar...转载 2018-04-10 21:32:08 · 751 阅读 · 0 评论 -
error CONFIG_PHYSICAL_START must be a multiple of 2MB
编译2.6.32内核时出现错误error CONFIG_PHYSICAL_START must be a multiple of 2MB解决方法如下:执行make menuconfig会出现内核配置界面然后进入Processor type and features在界面的底部会看到Physical address where the kernel is loaded然后将physical addr...原创 2018-04-10 21:37:57 · 323 阅读 · 0 评论 -
内核的Kconfig文件详解
内核是个复杂庞大的系统,对它进行配置、裁剪、编译原本非常的复杂和困难,但现在我们却只需要简单的2个命令make menuconfig和make uImage就搞定了,原因是在其背后有一个设计精巧的内核构造系统帮我们精确完成了各项任务。内核构造系统最关键的组成元素就是各个目录下的Kconfig文件和Makefile文件,本文将对这2类文件进行介绍,以使大家了解内核构造系统的基本情况,从而能够修改他们...转载 2018-03-28 17:20:59 · 1939 阅读 · 0 评论 -
Clang与LLVM的关系
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chr...转载 2018-04-11 23:35:11 · 5849 阅读 · 0 评论 -
详解Linux内核进程调度函数schedule()的触发和执行时机
详解Linux内核进程调度函数schedule()的触发和执行时机内核的调度操作分为触发和执行两个部分,触发时仅仅设置一下当前进程的TIF_NEED_RESCHED标志,执行的时候则是通过schedule()函数来完成进程的选择和切换。当前进程的thread_info->flags中TIF_NEED_RESCHED位表示需要调用schedule()函数进行调度。内核在两种情况下会设置该标志,...转载 2018-04-12 22:22:52 · 4972 阅读 · 0 评论 -
linux任务调度之schedule与schedule_tick函数
CFS and Periodic Scheduler (scheduler_tick())In Linux Scheduler, Work In Progress on July 3, 2012 at 5:26 pmThis article explains scheduler_tick(), the periodic linux scheduler.What is scheduler_tick(...转载 2018-04-12 23:03:33 · 2136 阅读 · 0 评论 -
linux内核调度的时机
进程切换有自愿(Voluntary)和强制(Involuntary)之分,在前文中详细解释了两者的不同,简单来说,自愿切换意味着进程需要等待某种资源,强制切换则与抢占(Preemption)有关。抢占(Preemption)是指内核强行切换正在CPU上运行的进程,在抢占的过程中并不需要得到进程的配合,在随后的某个时刻被抢占的进程还可以恢复运行。发生抢占的原因主要有:进程的时间片用完了,或者优先级更...转载 2018-04-13 05:49:33 · 2927 阅读 · 0 评论 -
微内核与宏内核
1、内核概述 Kernel是OS的核心,提供了硬件级的抽象,它向外部提供了对计算机设备的核心管理调用。我们将操作系统的代 码分成2部分。内核所在的地址空间称作内核空间。而在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和界面操作。外部管理程序与用户进程所 占据的地址空间称为外部空间。 通常,一个程序会跨越两个空间。当执行到内核空间的一段代码时,我们称程序处于内核态,而当程序执行到外部空...原创 2018-04-30 17:26:24 · 2672 阅读 · 0 评论 -
linux内核地址映射
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存转载 2017-04-03 16:47:59 · 3609 阅读 · 0 评论 -
linux内存映射
linux内存映射 内存管理分为对连续物理内存区管理和非连续内存区管理,本文主要讲解连续的物理内存区管理的技术中所涉及到的内核线性地址空间映射的相关知识。涉及到的东西有:页框,管理区(高端内存,低端内存),高端内存映射等,这些知识是掌握伙伴系统算法和slab分配器的基础。一、页框 页框为物理内存分配的基本单元,现代32位计算机一般设置为4KB(见上文计算机内存寻址)。内核必须转载 2017-04-03 15:44:19 · 428 阅读 · 0 评论 -
时钟周期/指令周期/机器周期/指令周期
时钟周期时钟周期也称为震荡周期, 定义为时钟脉冲的倒数, 是计算机中最基本, 最小的时间单位.在一个时钟周期内, CPU只完成最基本的动作. 对同一种机型而言, 时钟频率越高, 计算机工作速度越快.机器周期在计算机中, 为了便于管理, 通常把一条指令执行划分为若干个阶段, 每一个阶段完成一项任务. 如: 取指令, 存储器读, 存储器写等, 这每一项工作称为一个基本操作.转载 2015-01-23 20:54:30 · 1248 阅读 · 0 评论 -
逻辑地址、线性地址、物理地址和虚拟地址理解
逻辑地址(Logical Address) 是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地转载 2015-04-21 10:43:34 · 486 阅读 · 0 评论 -
linux下安装flashplayer
首先从https://get.adobe.com/flashplayer/中下载相应的安装包。选择如下图所示的版本然后执行如下命令 tar -xvf install_flash_player_11_linux.i386.tar.gz -C 你想解压的目录 ----将安装包解压。 其中起作用的就是libflashplayer.so将libf原创 2015-05-08 21:31:20 · 603 阅读 · 0 评论 -
Ubuntu 12.04 LTS 中文输入法的安装
我装的是英文版的 Ubuntu12.04,如果安装中文版,会自动安装中文输入法,这篇文章也是为了以后重装 Ubuntu 做一个准备废话不多说,进入正题: 第一步:安装语言包 进入 “System Settings”找到 “Language Support” 那一项,点击进入选择 “Install/Remove Languages”找到 “Chinese转载 2015-05-05 17:45:37 · 398 阅读 · 0 评论 -
win7自带分区工具
Windows7 给硬盘分区有两个特点: 1、默认全部是主分区。 2、会有一个 100MB 大小的隐藏分区,为“系统预留”。 如果喜欢折腾计算机,这两个特点会造成很多麻烦。能不能象XP那样,突破Windows7的安装分区限制,默认只分一个主分区,其它都是逻辑分区,以便于以后折腾?答案是肯定的,就是用Windows7自带的分区工具:diskpart。 背景知识:转载 2015-05-06 00:38:32 · 1455 阅读 · 0 评论 -
linux下bashrc与profile四种的区别
/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc很容易混淆,他们之间有什么区别?它们的作用到底是什么?/etc/profile: 用来设置系统环境参数,比如$PATH. 这里面的环境变量是对系统内所有用户生效的。/etc/bashrc: 这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么转载 2015-05-07 14:43:04 · 437 阅读 · 0 评论 -
SHELL脚本if语句
一:条件测试1. 语法:test 条件表达式 或 [ 条件表达式]2.文件测试:-d:测试是否为目录-f:测试是否为文件-e:测试目录或文件是否存在-r:测试当前用户是否有读取权-w:测试当前用户是否有写入权限-x:测试当前用户是否有执行权限例:测试/etc/hosts文件是否存在.如图2.数值比较:-eq:相等-ne:不相同-le:小于转载 2015-05-31 20:39:46 · 725 阅读 · 0 评论 -
Linux内核参数配置文件修改(/proc/sys与/etc/sysctl.conf变量对应关系)
Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的。在/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改, 可以通过更改/proc/sys中内核参数对应的文件达到修改内核参数的目的(修改过后,保存配置文件就马上自动生效),不过重新启动机器后之前修改的参数转载 2015-05-23 23:41:50 · 2761 阅读 · 0 评论 -
ubuntu14.04下的搜狗输入法的安装
Ubuntu14.04的特点之一就是搜狗输入法的支持,但是我们这种小白还不知道怎么安装。工具/原料Ubuntu14.04(中文版,联网)方法/步骤打开搜狗输入法Linux版的官网http://pinyin.sogou.com/linux/?r=pinyin,并下载你需要的版本,这里选择64位版。转载 2015-07-12 09:26:25 · 416 阅读 · 0 评论 -
解决 Ubuntu 14.04 无法调节屏幕亮度的问题
装好Ubuntu 14.04 后,最喜欢先打开的就是“系统设置”了,因为想把它先初步调节成自己喜欢的样式(当然,想进一步调节的话,就需要借助其他软件了),然后再去慢慢改造它。Ubuntu默认的屏幕亮度为最大,看着很刺眼,所以就想调低一点,但不管怎么调都没什么变化,所以就暂时没去管他,结果,就把它给淡忘了,今天刚好有空,索性就去找了一下解决方法。看来大家都遇到了这个问题,所以解决方法有很多,下面我就转载 2015-07-13 21:08:39 · 709 阅读 · 0 评论 -
unix的历史
Unix简介 Ken和Dennis最早是在贝尔实验室开发Unix的,此后的10年,Unix在学术机构和大型企业中得到了广泛的应用,当时的Unix拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的Unix“变种(Variations)”,这些变种反过来也促进了Unix的发展,其中最著名的变种之一是由加州转载 2015-02-17 13:23:02 · 566 阅读 · 0 评论 -
gdb查看函数调用栈
我们知道,通常一个程序的运行,不外乎是A函数调用B,B函数调用C等等,等所有的调用都完成后,整个程序的运行也就ok了。在这个过程中,每当有新的函数调用,系统都会把该函数的一些信息,包括函数的参数,以及一些寄存器的值等,保存到调用栈(call stack)上。等该函数运行完成后,这些信息再从调用栈上弹出(pop)。如下图所示,是一个完整的调用栈:在上图中,整体叫做调用栈(call stack转载 2015-08-05 14:56:06 · 41336 阅读 · 1 评论 -
gdb中x的用法
用gdb查看内存格式: x /nfu 说明x 是 examine 的缩写n表示要显示的内存单元的个数f表示显示方式, 可取如下值x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。i 指令地址格式c 按字符格式显示变量。f 按浮点原创 2015-08-05 15:49:53 · 37419 阅读 · 0 评论 -
linux内核pid哈希表
首先看一下kernel中的哈希表的数据结构,哈希表头:Cpp代码 struct hlist_head { struct hlist_node *first; }; 链表头是hlist_head,注意这是一个双向链表但不循环。first字段指向第一个节点。哈希表节点:Cpp代码 struct hlist转载 2017-04-09 17:11:34 · 1408 阅读 · 0 评论 -
x86物理内存布局
the figure shows the lowest megabytes of physical RAM memory in which the various parts of the kernel image reside.The figure shows the first megabytes of physical memory—how much is exactly re原创 2017-04-03 14:48:20 · 1688 阅读 · 0 评论 -
Homebrew详解
Homebrew是Mac下得套件管理器,类似于Linux系统中的 yum 或者 apt-get ,它能让你的Mac更完美。mongodb则是NOSQL数据库,一种文档数据库,不同于传统的关系型数据库(mysql,orcal等),这篇文章对brew做了基本介绍并使用brew在Mac下安装mongoddb以及其中的问题和注意事项(笔者笔记)最近工作需要完成的任务比较多,所以前一篇系列博客(基于gulp...转载 2018-06-07 06:07:15 · 5695 阅读 · 0 评论