Linux操作系统基础的常用命令
1,Linux简介Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机。
1.1Linux介绍Linux出现于1991年,是由芬兰赫尔辛基大学学生Linus Torvalds和后来加入的众多爱好者共同开发完成
1.2Linux特点多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性,良好的用户界面,出色的速度性能
1.3开源CentOS
主流:目前的Linux操作系统主要应用于生产环境,主流企业级Linux系统仍旧是RedHat或者CentOS
免费:RedHat 和CentOS差别不大,基于Red Hat Linux 提供的可自由使用源代码的企业CentOS是一个级Linux发行版本
更新方便:CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RedHat 那样需要花钱购买支持服务!
1.4Linux目录结构
bin (binaries)存放二进制可执行文件
sbin (super user binaries) ...
Linux操作系统处理器调度基本准则和实现
1,基本概念在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、低效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
处理机调度是多道程序操作系统的基础,它是操作系统设计的核心问题。
2,调度的层次一个作业从提交开始直到完成,往往要经历以下三级调度,如图2-4所示。
\1) 作业调度。又称高级调度,.其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。简言之,就是内存与辅存之间的调度。对于每个作业只调入一次、调出一次。
多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度。作业调度的执行频率较低,通常为几分钟一次。
\2) 中级调度。又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。为此,应使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定,把 ...
Linux操作系统学习——内核初始化
一. 前言 前文分析到Linux内核正式启动,完成了实模式到保护模式的切换,并做好了各种准备工作。下来就要看开始内核初始化工作了,源码位置位于init/main.c中的start_kernel(),源码如附录所示。这包括了一系列重要的初始化工作,本文会介绍其中一部分较为重要的,但是详细的介绍依然会留在后文各个模块的源码学习中单独进行。本文的目的在于承接上文给出一个从内核启动到各个模块开始运转的过程介绍,而不是详细的各部分内容介绍。
创建0号进程:INIT_TASK(init_task)
异常处理类中断服务程序挂接:trap_init()
内存初始化:mm_init()
调度器初始化sched_init()
剩余初始化:rest_init()
二. 0号进程的创建 start_kernel()上来就会运行 set_task_stack_end_magic(&init_task)创建初始进程。init_task的定义是 struct task_struct init_task = INIT_TASK(init_task)。它是系统创建的第一个进 ...
Linux操作系统学习——内核运行
一. 前言 上文中,我们分析了从按下电源键到BootLoader完成加载的过程。加载完成之后,就要正式启动Linux内核了,而在这之前首先要完成从实模式到保护模式的切换。本文主要分析以下几部分内容
新旧中断的交替
打开A20
进入main函数
内核初始化
其实整个过程中还有很多内容,比如检查各种硬件设备等,在此略过不提。下面就开始潜入Linux源码的海洋畅游啦。
二. 新旧中断的交替 在实模式下的中断显然不可以和保护模式的中断同日而语,因此我们需要关闭旧的中断(cli)并确立新的中断(sti)。main函数能够适应保护模式的中断服务体系被重建完毕才会打开中断,而那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,取而代之的是由系统自身提供的中断服务程序。
cli、sti总是在一个完整操作过程的两头出现,目的是避免中断在此期间的介入。接下来的代码将为操作系统进入保护模式做准备。此处即将进行实模式下中断向量表和保护模式下中断描述符表(IDT)的交接工作。试想,如果没有cli,又恰好发生中断,如用户不小心碰了一下键盘,中断就要切进来,就不得不面对实模式的中断机制已 ...
Linux操作系统学习——启动
一. 前言 Linux操作系统内核是服务端学习的根基,也是提高编程能力、源码阅读能力和进阶知识学习能力的重要部分,本文开始将记录Linux操作系统中的各个部分源码学习历程。
关于如何学习源码,个人觉得可以从以下角度入手,有效地提高阅读和学习的效率。(学习语言就不说了,这是基本功。学习IDE推荐Source Insight或者Visual Studio,网站源码阅读推荐woboq)
理解代码的组织结构。 以Linux源码举例,首先你得知道操作系统分为哪几个部分,他们单独做了什么功能,如何进行配合完成更为具体的功能。建立整体的印象有助于后续深入学习的时候方便理解,毕竟代码是用的不是看的,理解他的作用有利于理解为什么要这么做。
深入各个模块学习
模块接口: 这里推荐微软的画图工具visio或者思维导图xmind,用其画图可以将各个模块的接口列出,并绘制各个模块之间的关系,通过了解接口可以清楚各个模块之间的关系,即绘制模块组织图
工作流程:通过上面一步得到各模块间的关系,然后实际用断点或log等方式看一看整体的工作流程,在模块组织图的基础上绘制程序流程图
模块粘合层:我们的代码有很 ...
Linux操作系统段式存储管理、 段页式存储管理
1、段式存储管理1.1分段
进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。
内存分配规则:以段为单位进行分配,每个段在内存中占连续空间,但各段之间可以不相邻。
分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。
1.2段表
每一个程序设置一个段表,放在内存,属于进程的现场信息
1.3地址变换
1.4段的保护
越界中断处理
1.进程在执行过程中,有时需要扩大分段,如数据段。由于要访问的地址超出原有的段长,所以发越界中断。操作系统处理中断时 ,首先判断该段的“扩充位”,如可扩充,则增加段的长度;否则按出错处理
缺段中断处理
检查内存中是否有足够的空闲空间①若有,则装入该段,修改有关数据结构,中断返回②若没有,检查内存中空闲区的总和是否满足要求,是则应采用紧缩技术,转 ① ;否则,淘汰一(些)段,转①
1.5段的动态连接
为何要进行段的动态链接?
大型程序由若干程序段,若干数据段组成
进程的某些程序段在进程运行期间可能根本不用
互斥执行的程序段没有必要同时驻留内存
...
Linux操作系统汇编指令入门级整理知识点
前言我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他无法正确调用想执行的函数,结果他就开始在 C++ 代码里嵌入汇编了,绕过了种种限制终于如愿以偿,但是读代码的时候我们傻眼了…
因为项目是跨平台的,代码推送的 Linux 编译的时候他才发现,汇编代码的语法在 Linux 和 Windows 上居然是不一样的,结果他又用一个判断平台的宏定义“完美”地解决了,最终这些代码肯定是重写了啊,因为可读性太差了,最近在学习左值、右值、左引用和右引用的时候,总是有人用程序编译生成的中间汇编代码来解释问题,看得我迷迷糊糊,所以决定熟悉一下简单的汇编指令,边学习边记录,方便今后忘记了可以直接拿来复习。
什么是汇编语言汇编语言是最接近机器语言的编程语言,引用百科中的一段话解释为:
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编 ...
Linux操作系统汇编语言基础知识(图文代码)
1、什么是汇编语言,它在计算机语言中的地位?1汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言
2、汇编语言与源程序、汇编程序、汇编的关系?
3、汇编语言的特点
\1) 汇编语言与机器指令一一对应,可充分理解计算机的操作过程汇编语言指令是机器指令的符号表示
\2) 汇编语言是靠近机器的语言编程时要求熟悉机器硬件系统,可充分利用机器硬件中的全部功能,发挥机器的特点在计算机系统中,某些功能由汇编语言程序实现:实时过程控制系统、系统初始化、实际的输入输出设备操作
\3) 汇编语言程序的效率高于高级语言效率,指的是用汇编语言编写的源程序在汇编后所得的目标程序效率高时间域的高效率:运行速度快;空间域的高效率:目标代码占用存储空间少
4、汇编语言与高级语言的比较
5、进制转换1(略)
6、数据组织单位
\1) 位(bit)是计算机中表示信息的最小单位,符号b,是一个二进制位,每一位用0或1表示\2) 字节(Byte)8位二进制数为一个字节\3) 字(Word)若干个字节为一个字,一般一个字包含两个字节范围0000HFFFFH\4) 双字(Double Word)两个字 ...
Linux操作系统进程同步的几种方式及基本原理
1,进程同步的几种方式1.1信号量用于进程间传递信号的一个整数值。在信号量上只有三种操作可以进行:初始化,P操作和V操作,这三种操作都是原子操作。
P操作(递减操作)可以用于阻塞一个进程,V操作(增加操作)可以用于解除阻塞一个进程。
基本原理是两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收到一个特定的信号。该信号即为信号量s。
为通过信号量s传送信号,进程可执行原语semSignal(s);为通过信号量s接收信号,进程可执行原语semWait(s);如果相应的信号仍然没有发送,则进程会被阻塞,直到发送完为止。
可把信号量视为一个具有整数值的变量,在它之上定义三个操作:
一个信号量可以初始化为非负数
semWait操作使信号量s减1.若值为负数,则执行semWait的进程被阻塞。否则进程继续执行。
semSignal操作使信号量加1,若值大于或等于零,则被semWait操作阻塞的进程被解除阻塞。
1.2管程管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,其主要特点如下:
局部数据变量只能被管程的过程访问,任何外部过程都不能访问。 ...
Linux操作系统进程的状态和转换(五态模型)
1、进程的状态和装换1.1进程的三态模型按进程在执行过程中的不同情况至少要定义三种状态:
运行(running)态:进程占有处理器正在运行的状态。进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态; 在多处理机系统中,则有多个进程处于执行状态。
就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行的状态。当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
等待(wait)态:又称阻塞态或睡眠态,指进程不具备运行条件,正在等待某个时间完成的状态。也称为等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
引起进程状态转换的具体原因如下:
运行态→等待态:等待使用资源;
如等待外设传输;等待人工干预。
等待态→就绪态:资源得到满足;
如外设传输结束;人工干预完成。
运行态→就绪态:运行时 ...