linux操作系统相关常用问题总结

关于linux操作系统常用的相关问题总结。

  • Q1: 安装ubuntu这个linux发行版系统,为什么要先安装虚拟机VMware?我们电脑可以直接安装ubuntu吗?

    • A1: 直接在电脑上安装ubuntu,那电脑就真正成为ubuntu电脑了,当然可以选择在安装一个windows系统,但这样的话,电脑就是一个双系统的了。每次开机都要选择其中一个系统,要么windos,要么ubuntu。想想就脑壳疼,最讨厌做选择了。安装虚拟机VMware,虚拟机,顾名思义就是虚拟出一个机器,我们可以在这个机器上装任何想用的系统,相当于克隆出一个电脑。我们就可以实现ubuntu系统作为windows下的一个软件。每次开机默认windows,需要用到ubuntu时,再打开装有ubuntu系统的虚拟机。
  • Q2: VMvare虚拟机如何删除已经安装的ubuntu操作系统?

    • A2:如下图linux操作系统相关常用问题总结_第1张图片

    • Q3: 什么是shell?shell的基本操作?

      • A3: linux系统下会频繁看到shell这个名词,网上一大堆专业的解释,简单说shell就是敲命令。国内把linux下通过命令行敲命令的操作称作“ 敲命令”,国外的就高大上点,称为shell。简言之,shell就是在终端中敲命令;将多个shell命令按照一定的格式放到文本中,这个文本就是shell脚本。当然这样理解有点“大白话 ”,严格意义上讲,shell是一个应用程序,它负责接收用户输入的命令,然后根据命令做出相应的动作。shell负责将应用层或用户输入的命令传递给系统内核,然后由系统内核完成相应的操作,最后shell将结果反馈给应用层或用户。

      shell基本操作的格式:
      linux操作系统相关常用问题总结_第2张图片

  • Q4: linux系统下怎么下载软件?

    • A4: windows下有很多的下载软件,ubuntu系统下实际上也有很多下载的软件,其中用的最多的下载工具是APT下载。因为APT下载工具可以实现软件的自动下载、配置、安装二进制或源码的功能。APT下载工具和常用的’install“命令结合在一起构成了ubuntu下最常见的下载和安装方法。解决了linux平台下安装软件时,软件间相互依赖的缺陷。
      重点:软件安装使用如下命令:
      linux操作系统相关常用问题总结_第3张图片
  • Q5: linux文件系统的类型及作用是什么?

  • A5: 操作系统的基本功能之一就是文件管理,而文件管理是由文件系统完成的。文件系统目的就是实现数据的查询和存储,数据在硬盘上就是二进制数据,这时候就需要文件系统这个翻译器,将数据还原为人类可以看懂的文件形式。存储数据的物理设备有硬盘、U盘、SD卡、NAND FLASH、NOR FLASH、网络存储设备等。物理设备的物理结构不同,就需要不同的文件系统进行管理。举例:YAFFS文件系统管理NAND FLASH,ext文件系统管理硬盘、SD卡。

  • Q6: linux下文件系统结构及根目录中重要文件夹的作用?

  • A6:linux不像windows系统有C,D盘,只有一个根文件目录。通过指令cd /进入到根目录;根目录下重要文件夹的作用如下:

文件夹名称 作用
/bin 存储一些二进制可执行命令文件,/user/bin也存放一些基于用户的命令文件
/sbin 存储了很多系统命令
/user/sbin 也存储了许多系统命令
/root 超级用户root的根目录文件
/home 普通用户默认目录,在该目录下,每个用户都有一个以本用户命名的文件夹
/mnt 通常包括系统引导后被挂载的文件系统的挂载点
/etc 保存系统管理所需的配置文件和目录
/dev 存放设备文件,linux驱动主要是跟这个文件进行打交道的
/lib 保存系统运行所需要的库文件
/user/lib 存放一些用于普通用户的库文件
/lost+found 一般为空,当系统非正常关机以后,此文件夹下会保存一些零散文件
/var 存放一些不断变化的文件,比如日志文件
/user 包括与系统用户直接相关的文件和目录,比如应用程序和所需的库文件
/media 存放ubuntu系统自动挂载的设备文件
/proc 虚拟目录,不实际存储在磁盘上,用来保存系统信息和进程信息
/tmp 存储系统和用户的临时文件,该文件对所有的用户都提供读写权限
/opt 可选文件和程序的存放目录
/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息
  • Q7:ubuntu系统不像windows系统那样分盘,我们这些普通用户点开计算机的根目录到底是什么?

    • A7:ubuntu不像windows,直接打开C盘,就是C盘的根目录;ubuntu是支持多用户的,每个普通用户点开计算机进入的根目录,和根目录/不是同一个地位的。普通用户的根目录实际上就是/home/sunny。只要在ubuntu上创建了普通用户,系统就会在/home这个目录下创建一个以用户名为名称的文件夹,这个文件夹就是用户的根目录。用户可以对自己根目录下的文件夹进行随意的读写操作,但如果要修改真正根目录/下的文件夹,就会提示没有权限。
  • Q8:常用的文件操作命令有哪些

    • A8:
常用命令 命令格式 举例
创建新文本命令:touch touch 参数 文本名(备注:当文本名不存在时,参数可以直接省略;当文本名已经存在时,可以通过参数修改文本的一些属性 touch test(创建一个test文本)
创建新文件夹命令:mkdir mkdir 参数 文件夹名 mkdir testdir(创建一个新的文件夹)
文件及目录删除命令:rm rm 参数 文件或目录名(备注:参数是用来表示删除的方式,一般可省略) rm testdir -rf(强制删除testdir文件夹)
直接删除文件及目录命令:rmdir rmdir 参数 文件夹名 rmdir testdir(直接删除文件夹)
文件复制命令:cp cp 参数 源地址 目的地址
文件移动命令:mv mv 参数 源地址 目的地址
  • Q9: linux下权限管理相关的问题?
    • A9: ubuntu是多用户系统,给不同的使用者创建不同的账户,是为了方便系统管理员管理。装系统时创建的用户比后面创建用户权限大,但是比root用户权限小。
      ubuntu下的3种用户
初次创建的用户 此用户可以完成比普通用户更多的功能
root用户 系统管理员 系统中的王,拥有无限的权限
普通用户 安装完操作系统以后,创建的用户
  • 总结:以上三种用户,每个用户都有一个的ID号,简称为UID;操作系统通过UID来识别是哪个用户。

  • 权限就是对系统资源使用情况的限制,window下几乎很少用到权限,仅是偶尔打开某个软件出问题时,需要以管理员的身份打开;ubuntu下就需要经常和用户权限进行打交道。做嵌入式开发好在不用关心权限的问题,因为基本是单用户,重点关注的是文件权限问题。

    • 文件的权限一般有3种:读®,写(w),执行(x)。
  • 权限管理命令:可以通过shell来操作文件的权限管理,主要是通过chmod和chown这两个命令。具体用到时,自行找度娘。

  • Q10: linux下是怎么进行磁盘管理的?

    • A10: linux系统不像window做磁盘分区,而是将磁盘的一部分做成文件夹的形式,这个文件夹的名字就是“挂载点”。
  • Q11:怎么简洁的概述计算机硬件?因为操作系统这种东东和硬件有很大程度的关联性。

    • A11:计算机硬件可总结为3个部分
输入单元 键盘、触摸屏等东东将数据输入到计算机里面
主机部分 系统单元:一堆板子(当然不是破铜烂铁)、CPU与主存储器等;CPU(central processing uint)是一个具有特定功能的芯片,里面含有微指令集。若想要主机执行特异的功能,这时候就需要考虑cpu里面是否内建有相关的微指令集。cpu的主要工作就是运算和管理,分别通过数字逻辑单元和控制单元完成;其中数字逻辑单元主要完成程序的运算和逻辑的判断 ,控制单元主要在协调周边主件与各单元之间的工作。重点:cpu读取的数据是从主存储器中来的,主存储器中的数据是从输入单元传输进来的;cpu处理完成的数据,还要写到存储单元里面,最后数据从存储单元传输到输出单元。
输出单元 例如屏幕、打印机等
  • Q12: 什么是CPU的超线程(hyper-threading,HT)?

    • A12:目前的cpu都至少是2核心以上的,但Intel还有个CPU的超线程(hyper-threading)功能。通常CPU的指令周期都太快了,运算核心经常处于闲置状态。目前的系统大多都是多任务的系统,同时间会有很多的程序让CPU运行。故有没有什么方法可以让CPU假象的同时执行两个程序?这时候将每个CPU内部重要的缓存器(register)分成两群,让程序分别使用这两群缓存器。也就是有两个程序同时竞争CPU的运算单元,且不用通过操作系统的多任务切换功能完成。这样大部分i7等级的CPU一般只有2个实体核心,通过HT机制,就操作系统可以抓到8个核心,并且每个核心实现逻辑上分离,这样就可以同时运行8个程序。
  • Q13:什么是操作系统?可否用简介通俗的语言总结?

    • A13:哈哈,大白话这个我在行。操作系统(operating system ,os)其实就是一组程序,这个程序的重点就是管理计算机的所有活动以及驱动系统中的硬件。因为操作系统的核心主要管控硬件及提供相关的能力(如:存取硬盘、网络功能、CPU资源控制功能等),这些管理功能是十分重要的。用户一不小心损坏核心程序,会将整个系统弄崩溃。故核心程序存放在内存中的区块是受保护的,并且开机后一直常驻在内存中。
  • Q14:操作系统的内核主要有哪些功能?

    • A14: function1:系统呼叫接口(system call interface),这个大白话就是底层和应用层之间的API接口。可以方便应用层开发着调用地城资源。
      • function2: 程序管理(process control),一部计算机可以同时有很多的工作跑到CPU等待运算处理,内核需要控制这些工作,让CPU的资源可以有效的分配。
      • function3:内存管理,控制整个系统的内存管理,操作系统所有的程序代码与数据都必须先存在内存当中。通常内核会一共虚拟内存的功能,当内存不足时,可以提供内存置换(swap)功能。
      • function4:文件系统管理(file system management),数据的输入输出(I/O),及不同文件格式的支持。若内核不认识某个文件系统,那么用户将无法使用格式的文件。如:window98就不认识NTFS文件格式的硬盘。
      • function5:设备的驱动(device drivers),一般都有“可加载模块”的功能,可将驱动程序编辑成模块,这样就不需要重新编译内核了。备注:事实上驱动程序一般都是硬件厂家提供的,厂家会参考操作系统的驱动程序开发接口,开发完毕就将驱动程序和硬件一同卖给用户。
  • Q15: 嵌入式设备开机到启动操作系统之前的流程有哪些?

    • A15: step1,BIOS:开机主机第一个可开机的装置;
      • step2 MBR:第一个可开机装置的第一个扇区内的主要启动记录区块,内含开机管理程序;
      • step3:开机管理程序(boot loader):可读取核心文件来执行的软件;
      • step4 核心文件:开始操作系统的功能。
        • 备注:bootloader的主要任务有以下几点:
          • 提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能;、
          • 载入核心文件:直接指向可开机的程序区段来开始操作系统
          • 转交其他loader:将开机管理的功能转交给其他的loader负责。
  • Q16:网络编程中服务端套接字编程的步骤是什么?

    • A16:服务端套接字编程的步骤:step1:调用socket函数创建套接字;step2:调用Bind函数分配ip和port;step3:调用listen函数监听客户端的请求;step4:调用accept函数响应客户端的请求。step4:调度用send,发送数据
    • 客户端套接字编程的步骤:step1:调用socket创建套接字;step2:调用connet函数进行连接;step4:调用send函数发送数据。
    • 备注:思考下为啥客户端不用调用bind函数进行分配ip和port?那么又怎么把地址和端口传给客户端的。
  • Q17: TCP和UDP的主要差别是什么?

    • A17:TCP为了提供可靠的数据传输服务,TCP会在不可靠的IP层进行流控制。故流控制是区分TCP和UDP的重要标志。若将TCP的流控制进行去除,那么所剩的内容也就屈指可数了。故TCP的生命也就是流控制。备注:3次握手和4次挥手也属于流控制的一种。
  • Q18:可以用简介的语言比喻TCP和UDP吗?

    • A18:当然是OK的了。根据协议工作方式的差别:TCP可以比喻成电话,UDP可以比喻成信件。但是重点来了,千万不要认为电话比信件的速度快。TCP的速度无法超过UDP,也就是数据收发的速度。TCP在收发某些类型的数据有可能接近UDP。例如:每次交换的数据量越大,那么TCP的速度就越接近UDP的速度。
  • Q19:怎么区分什么场景下用TCP和UDP?TCP比UDP慢的原因有哪些?

    • A19:例如传递压缩文件时,只能选用TCP,因为传1万包,即使丢1包,压缩文件就很难解压。网络实时传输音视频时,一般选用UDP。因为对于多媒体数据而言,即使丢失一部分数据,也不会有太大的问题,最多导致画面抖动或音质有杂音。TCP比UDP慢有如下两个因素导致的:
      • 收发数据前后需要连接设置和清除过程
      • 收发数据过程中为了保证可靠性,而添加了流控制。
        总结:若收发的数据小且需要频繁连接时,此时UDP比TCP更高效。
  • Q20:linux为什么可以直接操作I/O,而window只能通过send和recive函数?

    • A20:通过bind函数进行分配地址
  • Q21: windows下的句柄的作用是什么?和linux下的文件描述符区别是什么?

    • A21:句柄也是区分差别的唯一标识。
  • Q22:底层的I/O函数和ANSI标准定义的I/O的区别是什么?

  • Q23:套接字的类型是根据不同的应用场景变化的吗?

    • A23:根据数据实际的应用场景,需要选用不同的套接字类型
  • Q24:IPV4和IPV6地址协议的差别是什么?

    • A24: 差别只是地址长度不一样。IPV6是16个字节的地址。IPV4为4个地址,且分为A、B、C、D四种类型。且每个地址都是有网络和本机地址组成的;IPV4的4种类型是通过网络和本机地址的长度不一样来进行区分的。
  • Q25:什么是端口号?

    • A25:端口号就同一个操作系统用来区分不同的socket通道用的。端口号是有16个字节组成的。前面的端口号0 —1023是知名端口(well know),是给特定的应用程序用的。走的协议不一样,故两者可以共用一个端口,因为两者不可能同时使用。应用层的套接字
  • Q26:什么是网络字节序?网络字节序是大端的还是小端的?

    • A26: 因为怕接受端和服务端数据接收和发送的大小端不一样,故协商好网络传输时,统一转成大端的方式进行传输。
  • Q27: 客户端建立的过程

    • A27:客户端会先通过socket进行获取ip和port,然后发送connect连接请求,请求和服务端进行连接;然后发送send和reacive。本着谁主动发起的,谁进行关闭。客户端直接调用close进行关闭通道。
  • Q28: 怎么实现服务器端的迭代服务?

    • A28: 若是单线程,则通过while循环进行不停的接收客户端的连接请求。
  • Q29:套接字的3次握手和4次挥手

    • A29:客户端发起建立连接时:A:(seq号)准备好了吗? B:(ack号)准备好了,可以连接了。A:好的,谢谢
      客户端发起断开连接,是需要4步的:A:可以端了吗? B:稍等哈 B:可以断了A:好的,已经端来
      其中断开连接时B的第二个回复属于重发机制,带的ack号是不会变化的。
  • Q30:网络协议的传输层属于第几层?主要包括什么?两者之间的区别是什么?

    • Q30:传输层位于第2层,主要包括TCP和UDP这2种。数据的交换过程可以通过TCP套接字完成TCP的方式和UDP套接字完成UDP的方式。TCP的可靠性比UDP强,但是UDP更加简洁。因为UDP客户端发送请求时不会带SEQ,给数据包分配序号;而且服务端回复时也无需带ACK的应答消息。故UDP的性能有时会比TCP高出很多,编程实现也比TCP简单。故在重视性能而非可靠性的情况下,可以选择UDP。
      • Q31:UDP需要建立连接吗?UDP的C/S需要几个套接字?
    • A31:UDP的C/S不需要像TCP那样在连接的状态下进行交换数据,也就是说无需调用TCP中的listen()和accept()函数,UDP只有创建套接字和数据交换的过程。TCP的套接字是一一对应的关系,即若要响应10个客户端的套接字请求,则也需要10个服务端的套接字。而UDP的C/S只需一个socket,UDP就像“写信”交互数据,双方的地址都不会变的。
  • Q32: 如何优雅的断开套接字连接?

    • A32:TCP的断开连接比建立连接更为重要。为什么呢?因为连接过程中一般不会出现大的变故,但是断开过程中,有可能发生预想不到的结果。调用close()或closescockey()函数是单方面的断开连接,是一种粗鲁的断开方式,不仅无法传输数据也无法接收数据。情侣分手还需要告知对方呢,不能单方便的做决定(渣男除外),这个断开方式真粗鲁。两个主机一旦创建了套接字连接,每个主机就拥有了单独的输入流和输出流。优雅断开的shutdown()函数,只断开其中的一个流,属于半关闭。
  • Q33: 为什么要有多进程服务器端?

    • A33: 举例:1个客户端连服务器,需要1s。若100个客户端需要同时连服务器,那第100个客户端就需要等100s,用户体验肯定要砸电脑了,这时候就需要并发服务器来解决这种问题了。代表性的并发服务器端实现的模型和方法有如下3种。
      多进程服务器 创建多个进程提供服务(windows平台下不支持,linux平台才支持)
      多路复用服务器 通过捆绑并统一管理I/O对象,提供服务
      多线程服务器 通过生成和客户端一样的线程提供服务
  • Q34: 内核同步的方式有哪些?

    • A34:内核同步的方式有事件(event)、互斥量、信号量。
  • Q35:操作系统完成引导后,整个RAM空间是怎么存放的?

    • A35:
      linux操作系统相关常用问题总结_第4张图片
    • 备注:在拥有64K内存的计算机系统中,其中控制台命令处理程序~~基本输入/输出系统,这3部分只占6K的内存大小;其中将近58K的内存被临时程序区占用。
  • Q36: RGBLCD液晶如何显示?

    • Q36:搞单片机时,都是在搞点阵式液晶。LCD工作原理如下:LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否,达到显示的目的。其中LCD液晶需要重点关注的几个点:
      • 分辨率:LCD显示器,常听到720P、1080P、2K或4K的字眼,这就是LCD显示器的分辨率。LCD显示器都是一个一个的像素点组成。每个像素点就类似于一个灯(在OLED显示器中,像素点就是一个灯)。这个灯是RGB灯,RGB是光的三原色。一个LCD屏幕的像素数量格式如下:
        1080P 1920 (行)*1080(列) = 2073600个像素点。
        2K 2560 *1440个像素点
        4K 3840 *2160个像素点
        • 备注:左上角是第一个像素点;右下角是最后一个像素点。
        • LCD尺寸不变的情况下,分辨率越高越清晰。我们常用的24寸显示器基本上都是1080P的,而且显示使用的5寸手机基本上也是1080P的,故手机显示细腻程序比电脑要好。
        • LCD显示器的分辨率是一个很重要的参数,但并不是分辨率越高,LCD就越好。分辨率只是衡量一款LCD好坏的其中一个参数,还有色彩还原程度、色彩偏离、亮度、可视角度、屏幕刷新率等其他参数。
      • 像素格式:一个像素点就相当于一个RGB灯,其中R、G、B这三部分分别使用8bit的数据。每个像素点就是8*3 = 24bit,这种像素格式为RGB888。如果在加入8bit的Alpha(透明)通道的话,那么一个像素点就是4个字节,这种像素格式为ARGB888。
      • RGB接口的数据线如下:
信号线 描述
R[7:0] 8根红色数据线
G[7:0] 8根绿色数据线
B[7:0] 8根蓝色数据线
DE 数据使能线
VSYNC 垂直同步信号线
HSYNC 水平同步信号线
PCLK 像素时钟信号线
  • 驱动ATK7016这款屏幕,配置的步骤如下:

    • 初始化LCD所使用的IO: 首先需要初始化LCD所使用的IO,将其复用为eLCDIF接口IO。
    • 设置LCD的像素时钟:查阅所使用的LCD屏幕数据手册,或自己计算出的时钟像素,然后设置CCM相应的寄存器。
    • 配置eLCDIF接口:设置LCDIF的寄存器CTRL、CTRL1、TRANSFER_COUNT、VDCTRL~4、CUR_BUF和NEXT_BUF,根据LCD的数据手册设置相应的参数
    • 编写API函数:驱动LCD屏幕的目的就是显示内容,所以要编写一些基本的API函数,如:画点、h画线、画圆函数、字符串显示函数等。
  • Q37: 实时操作系统包括哪些?

    • A37:实时操作系统包括软实时操作系统和硬实时操作系统。硬实时操作系统中运算超时是不被允许的;软实时操作系统中超时不会有致命的后果。
  • Q38:什么是前后台系统?

    • A38:前后台系统包括需要无限运行的模式,叫做后台;中断程序实现异步处理,叫做前台。前台也叫做中断级,后台也叫做任务级。
  • Q39: 怎么保护共享资源?

    • A39:互斥信号量(mutex)是内核的一个对象,用于保护共享资源;任务必须访问共享资源时,必须先获取mutex,使用完这个资源,必须释放mutex。
  • Q40: 常用哪些数据结构?

    • A40: case1:数组,用来记录同类事物的表;case2: 位图,位图是数组的一种特殊应用,常用做“登记表”,用来记录事物的状态。case3:结构体,不分类存放,用来描述同一事物,类似通讯录中的一条记录。case4:链表,同数据类型的集合,分类存放,但空间上不要求连续。可以存放大量的数据,类似于“档案柜”。case5:队列(也就是fifo),具有先进先出的特性,可以通过数组或链表来实现;主要用于对象的排列。case6:堆栈:采用先进后出规则组织的数据结构,主要通过数组实现;用于程序嵌套模块的运行。
  • Q41:任务运行时和处理器之间的关系?

    • A41:任务运行时的环境包括:处理器的运行环境和内存的运行环境,处理器通过两个指针寄存器(PC和SP)
      来与任务代码和任务堆栈建立联系,并且运行它。备注:PC(处理器),SP(寄存器组)。
  • Q42:多任务时:任务和处理器之间的关系?

    • A42:任务的切换就是任务运行环境的切换;首先要明确一个概念:具有控制块的程序才是一个可以被系统可以运行的任务。其中程序代码、私有堆栈、任务控制块是任务的三要素,任务控制块提供了运行环境的存储位置。
  • Q43: uC OS实时操作系统中每个任务需要提供哪3个部分?

    • A43: 一个完整的任务包含以下3个方面
      任务代码 程序
      任务的私有堆栈 用以保护运行环境
      任务控制块 提供私有堆栈,也是虚拟处理器的位置
      备注:这3个是任务方必须提供的基本信息。
  • Q44:单片机的boot主要作用?修改Boot时,需要哪些注意事项?

    • A44: boot主要就是初始化和升级相关的硬件(如外部存储flash芯片,外部看门狗),判断是否有升级文件要进行升级。若无需升级,则跳到系统工程文件,运行应用层的代码。修改boot时,需要注意:需要保持boot调用函数的相对独立。boot主要是对工程代码进行升级,故boot代码是极其重要的。重点备注:严禁boot和应用程共用函数,如又共用函数时,当工程发生更改时,boot所调用的函数地址会发生偏移,会导致boot不能升级。boot的软件框架,要尽量做到简洁,不需要添加过多的功能。
  • Q45:freeRTOS和uC OS相比,有哪些优势?

    • A45:有如下优势
      ROM和RAM的消耗情况 freeRTOS内核ROM和耗损的RAM都比uC OS要小,特别是RAM,这是单片机稀缺的。 uC OS至少需要5k的RAM;freeRTOS需要2~3K
对栈的消耗 freertos可以用协程(Co-routine),减少ram的消耗(共用栈) uC OS只能用任务(task),每个任务有单独的栈(stack)
对任务的管理 freertos可以有优先度一样的任务,这些任务是按时间片来轮流处理。freertos可以管理超过64个任务。 uC OS每个任务都有独一无二的优先级,uC OS最多只能管理64个任务
收费情况 freertos商业上使用是免费的,uC OS商业上使用是收费的
  • Q46:OS操作系统的任务有哪些状态?

    • A46: 操作系统有:挂起态、就绪态、运行态、睡眠态、等待态、消息等待态这6种状态。其中大部分处于的状态都是就绪态。其它各部分经过特定的条件触发后,最终都是返回到就绪态。ESOS是可剥夺实时多任务内核,具有8个优先级的进程抢占调度。也就是最高优先级的任务一旦处于就绪状态,则立即抢占低优先级任务的处理器资源。基于时间片轮询的算法,每个优先级最多可以创建8个相同优先级的任务,相同任务的优先级通过时间片轮算法进行切换。备注:中断调度算法主要在systick中实现,调度算法计算周期是根据systick的时间。中断调度算法只要有两种实现方式:时间片轮算法实现相同优先级的切换;最高优先级算法实现任务抢占切换。
  • Q47:学习命令和脚本之前,首先要对linux有个清醒的认识。linux可以被划分为哪4部分?

    • A47:linux可以划分为内核、gun工具、图形化桌面环境、应用层软件这4部分。内核通过gun系统工具链和窗口管理工具对应用程序进行管理。
  • Q48:linux怎么进行内存管理?linux怎么管理进程?

    • A48:linux会创建好多的虚拟内存,也就是swap_buffer。当真正要处理的时候,才会强制在物理内存中给虚拟内存腾出地方。linux将运行的程序称为进程,进程可以在前台运行,输出显示在屏幕上;也可以在后台运行,隐藏在幕后。linux内核通过创建第一个init进程来启动系统中所有的进程,当linux内核启动时,将init进程加载到虚拟内存。内核启动其他进程时,也会在虚拟内存中给新进程提供一块专有的区域,用来存储进程中要用到的数据和代码。备注:一些linux发行版会通过表来管理系统开机中要启动的进程。linux系统中,这些表通常位于专门文件/etc/inittab中。ubuntu版的linux,会将开机时需要启动或停止的某个应用的脚本放到/etc/init.d目录中,这些脚本通过/etc/rcX.d目录下启动脚本中的符号链接符,通过entry入口启动,其中X代表运行级(run level)。
      linux操作系统的init系统采用了运行级,linux操作系统有5个启动运行级。
      只启动基本的系统进程及一个控制台终端进程,我们称为单用户模式。通常用来系统有问题时进程紧急的文件系统维护。备注:这种模式下,仅有一个人(也就是系统管理员)才能登陆到系统中进行操作数据。 运行级为1时
      这个运行级中,大多数的应用软件:网络支持程序,都会启动 标准的启动运行级3
      这个运行级上系统会启动图像化的X window系统,允许用户通过图性话左面登录系统 linux下常见的运行级5
      备注:linux系统可以通过调整启动运行级来控制整个系统的功能,将运行级从3调整到5,系统就可以从基于控制台的系统编程更先进的图像化X window系统。可以通过ps命令查询当前正在运行的进程。
  • Q49:linux内核是怎么对硬件设备进行管理?

    • A49: 任何linux系统需要通信的硬件设备,都需要在内核代码中加入驱动代码。驱动程序相当于应用程和硬件设备的中间人,允许内核和设备之间进行交换数据。在linux内核中有2种方式由于插入设备驱动程序。
      编译进内核的设备驱动代码 每次给系统添加新的设备时,都需要编译内核
      可插入内核的驱动模块 后期提出了内核模块化,允许将驱动代码,从内核中插入或删除,且无需编译内核。这种方法极大的简化和扩展的硬件设备在linux系统上的应用
      linux系统将硬件设备看成3种特殊的文件,称为设备文件。
字符型设备文件 指处理数据时,每次只能处理一个字符的设备。大多数的调制解调器和终端都是字符型的设备
块设备文件 指每次都可以处理大块数据的设备,如硬盘。
网络设备文件 指数据包发送和接收数据的设备。包括各种网卡和一种特殊的回环设备,回环设备指linux系统中常见的网络编程协议与自身通信。

备注:linux系统为每个设备都创建一种称为节点的特殊文件,与设备间的通信都是通过设备节点完成的,每个节点都在linux内核里面有唯一的数值对进行对应,数值对包括一个主设备号和一个次设备号。备注:类似的设备被划分到相同的主设备号中,次设备号用来标识主设备组下某个特定的设备。

  • Q50:linux是怎么进行文件管理的?
    • A50:不同于其他的操作系统,linux内核支持通过不同类型的文件系统从硬盘中读写数据。此外linux操作系统还兼容支持其他操作系统,如(window)的文件系统读写数据。linux支持如下类型的文件系统。
文件系统 描述
ext linux扩展文件系统,最早的linux文件系统
ext2 第二扩展文件系统,在ext的基础上提供了更过的功能
ext3 第三扩展文件系统,支持日志功能
ext4 第四扩展文件系统,支持高级日志功能
hpfs OS/2高性能文件系统
jfs IBM日志文件系统
iso9660 ISO 9660文件系统(CD- ROM)
minix minix文件系统
msdos 微软的FAT16
ncp Nwtware文件系统
nfs 网络文件系统
ntfs 支持microsoft nt文件系统
proc 访问系统信息
ReiserFS 高级linux文件系统,能提供更好的性能和硬盘恢复功能
smb 支持网络访问的Samba SMB文件系统
sysv 较早的unix文件系统
ufs BSD文件系统
umsdos 建立在msdos上的类unix文件系统
vfat window 95文件系统(FAT32)
XFS 高性能64位日志文件系统

备注:linux服务器所访问的所有硬盘都必须格式化成上述文件系统中的一种。linux内核采用虚拟文件系统(virtual file system,VFS)作为和每个文件系统交互的接口,这也为linux内核同任何类型的文件系统提供了统一的接口,当每个文件系统都被挂载和使用时,VFS将信息都缓存在内存中。

  • Q51:什么是GUN工具?

    • A51:操作系统需要工具来执行一些标准功能,GUN组织(gun是gun is not unix的缩写),开发出了一套完整的unix工具。将linux内核和gun操作系统工具整合到一起,就是一款完整的、功能丰富的免费操作系统。供linux系统使用的这组核心工具称为coreutils(core utilities)软件包,由3部分组成,每一组都包含了linux系统管理员和程序员至关重要的工具:
      用以处理文件的工具
      用以操作文件的工具
      用以管理进程的工具
      所有linux发行版默认的shell都是bash shell,是gun组织成员bourne(创建者的名称) shell的替代品。linux常用如下版本的shell。
      shell 描述
      ash 一种运行在内存受限环境中简单的轻量级shell,但与bash shell完全兼容
      kom 一种与Boume shell兼容的编程shell,但支持如关联数组和浮点运算等一些高级的编程特性
      tcsh 一种将C语言中的一些元素引入到shell脚本中的shell
      zsh 一种结合bash、tcsh和kom的特性,同时提供高级编程特性、共享历史文件和主题化提示符的高级shell。

      备注:大多数linux发行版包含多个shell,但通常会采用其中一个作为默认shell。

  • Q52:什么是linux发行版?

    • A52:完整的linux系统包称为发行版,通常可以将linux发行版归为3种:
      完整的核心linux发行版 包含内核、一个或多个图形化桌面环境及编译好的常用的linux应用,且提供一站式的完整linux安装。
      特定用途的发行版 通常基于某个主流发行版,但仅包含主流发行版中的一小部分用于某种,特定用途的应用程序。除了提供特定软件外(如仅为商业用户提供的办公应用),定制化发行版还尝试通过自动检测和自动配置常见硬件来帮助新手安装linux。
      LiveCD测试发行版 特征:无需安装,就可以看到linux系统是什么样的。基于现代PC都能从CD启动,而不是从标准硬件启动。一些linux发行版创建了包含linux样本系统(称为linux LiveCD)的可引导的CD。可以通过CD来启动PC,无需在硬盘安装任何东西都可以运行linux发行版。只要插入CD就可以引导了,所有的linux软件都将直接从CD上运行。用户可以从互联网上下载各种linux LiveCD,刻录,然后就可以体验了。

      • 一些较为流行的核心linux发行版如下:
        发行版 描述
        slackware 最早的linux发行版中的一员,在linux极客中较为流行
        Red Hat 主要用于Internet服务器中的商业发行版
        Fedora 从红帽中分离出的家用发行版
        Gentoo 为高级linux用户设计的发行版,仅包含linux源代码
        openSUSE 用于商用和家用的发行版
        Debian 在linux专家和商用linux产品中流行的发行版

      • 一些常用的特定用途的linux发行版
        特定用途的linux发行版 描述
        CentOS 一款基于Red Hat企业版linux源代码构建的免费发行版
        Ubuntu 一款用于学校和家庭的免费发行版
        PCLinuxOS 一款用于家庭和办公的免费发行版
        Mint 一款用于家庭娱乐的免费发行版
        dyne:bolic 一款用于音频和MIDI应用的免费发行版;允许启动后将CD从光驱中拿出,将linux核心文件作为一个文件复制到windows硬盘上。待CD启动后,系统会寻找那个文件,并从中读取系统文件,称之为对接。备注:必须在从CD引导启动之前就把系统文件复制到硬盘中。
        Puppy Linux 一款适用于老旧PC的小型免费发行版
        备注:许多特定用途的linux发行版都是基于Debinan linux。它们使用和Debian一样的安装文件,但仅打包了Debian系统中的一小部分。

        • 流行的linux LiveCD版本如下:
          发行版 描述
          Knoppix 来自德国的一款linux发行版,也是最早的linux liveCD
          PClinuxOS 一款成熟的LiveCD形式的linux发行版
          ubuntu 为多种语言设计的世界级linux项目
          Slax 基于Slackware linux的一款liveCD linux
          Puppy linux 为老旧PC设计的一款全功能linux。只包最少数量的linux系统文件,当CD引导启动时,LiveCD的启动脚本直接将它们复制到内存中。允许linux启动后立即把CD从光驱中取出。这样不仅提高了程序运行速度(程序在内存中运行更快),而且还空出了CD光驱
          总结:许多特定用途的linux发行版都有对应的linux LiveCD版本,比如ubuntu ,允许直接从liveCD安装整个发行版。可以从CD引导启动,让用户体验一下linux发行版,如果喜欢,再把它安装到硬盘上。但是从CD上访问所有东西,应用程序会运行的很慢。由于对CD无法写入数据,对linux系统作任何修改都会在重启后失效。但是有些linux LiveCD通过如下方法改进了上述的一些问题:
          • 能将CD上的linux系统文件复制到内存中
          • 能将系统文件复制到硬盘上
          • 能在U盘上存储系统设置
          • 能在U盘上存储用户设置
      • 非常流行的技术就是常见的U盘(闪存或闪盘)来存储linux LiveCD会话数据,几乎每个linux iveCD都可以识别插入的U盘,并且可以从U盘上读写文件。这就允许启动linux LiveCD,使用linux应用来创建文件,然后将这些文件存储到U盘上。这样windows用或别的电脑就可以访问这些文件。

  • Q53:什么是CLI?有哪些方式可以进入CLI模式?进入 CLI的快捷键或方法是什么?

    • A53:shell所提供的文本命令行界面(command line interface)。进入CLI,是让linux系统退出图形化桌面模式,进入文本模式,也被称为linux控制台。linux系统启动后,会自动创建出一些虚拟的控制台,运行在linux系统内存中的终端会话。大多数的linux发行版会启动5~6个(或更多的虚拟控制台)。
    • 可以通过虚拟化的终端控制台,还可以通过linux图形化桌面环境中的终端仿真包(终端仿真包会在桌面图形化窗口中模拟控制台终端使用)进入,可以将终端仿真包看成GUI(in the GUI)的GUI的CLI终端。
    • linux发行版通常通过快捷键ctrl +alt组合键进入,然后通过F1~F7进入要使用的虚拟控制台。备注:其中ubuntu使用F7,RHEL使用F1。图像化桌面环境中提供了很多进入CLI的方式,其中GNOME Terminal、Konsole Terminal和xterm,这三个终端仿真器,通常会默认安装在linux发行版中。
  • Q54:怎么查看linux操作系统下的bash手册?

    • A54:大多数linux发行版都自带查找shell命令及其他GUN工具信息的在线手册。man命令就是用来访问存储在linux系统上的手册页面。举例:man xterm就可以进入到该手册页面,点击q键可以退出,重新获得shell CLI提示符。手册页有对应的内容区域,分配了1~9这几个数字来一一对应内容区域。
      区域号 所覆盖的内容
      1 可执行程序或shell命令
      2 系统调用
      3 库调用
      4 特殊文件
      5 文件格式
      6 游戏
      7 概览、约定及杂项
      8 超级用户和系统管理员命令
      9 内核例程
      备注:当一个命令会在多个内容区域都有对应的手册页,举例hostname命令;对于手册1中的命令,举例:man 1 hostname。
    • 使用ls -l命令显示长列表举例:
      drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Videos
      总结:这种长列表格式的输出在每一行中列出了单个文件或目录。每一行包含了文件(或目录)的下述信息:
      drwxr 文件类型,比如目录(d)、文件(-)、字符型文件©或块设备(b)
      -xr-x 文件的权限
      2 文件的硬链接总数
      christine 文件属组的用户名
      christine 文件属组的组名
      4096 文件的大小(以字节为单位)
      Apr 22 20:37 文件上次修改时间
      Videos 文件名或目录名
      备注:- l参数是一个强大的工具,通过这个参数几乎可以看到系统上任何文件或目录的大部分信息。
      • 链接文件是linux文件系统的一个优势,若需要在系统上维护同一个文件的两份或多份副本时,除了保存多份单独的物理文件副本外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本称为链接。链接是目录中指向文件真实位置的占位符,linux系统下有两种不同类型的文件链接:符号链接和硬链接。
        符号链接 符号链接是一个实实在在的文件,指向存放在虚拟目录结构中某个地方的另一个文件;这两个通过符号链接在一起的文件,彼此的内容并不相同。命令举例:ln -s data_file sl_data_file
        硬链接 硬链接会创建独立的虚拟文件,其中包含了源文件的信息和位置。根本上而言是同一个文件。命令举例:ln ;不需要在加入别的参数。备注:只能对统一存储媒体的文件创建硬链接。不同存储媒体的文件之间只能使用符号链接。
  • Q55:linux的系统管理命令有哪些?如何通过命令行查询linux系统的内部信息?

    • A55:PS命令只会显示当前控制台下属于当前用户的进程。ps命令是最复杂的一条指令,可用的参数是很多的。故只要记住最有用的参数就可以了,大多数的linux系统管理员都有自己的一组参数。

      • ps指令下的参数和对应的功能描述:
        参数 功能描述
        -A 显示所有进程
        -N 显示与指定参数不符的所有进程
        -a 显示除控制进程(session leader)和无终端进程外的所有进程
        -d 显示除控制进程外的所有进程
        -e 显示所有进程
        -C cmdlist 显示包含在cmdlist列表中的进程
        -G grplist 显示组ID在grplist列表中的进程
        -U userlist 显示属主的用户ID在userlist列表中的进程
        -g grplist 显示会话或组ID在grouplist列表中的进程
        -p pidlist 显示PID在pidlist列表中的进程
        -s sesslist 显示会话ID在sesslist列表中的进程
        -t ttylist 显示终端ID在ttylist列表中的进程
        -u userlist 显示有效用户ID在userlist列表中的进程
        -F 显示更多额外输出(相对-f参数而言)
        -O format 显示默认的输出列及format列表指定的特定列
        -M 显示进程的安全信息
        -c 显示进程的额外调度器信息
        -f 显示完整格式的输出
        -j 显示任务信息
        -l 显示列表
        -o format 仅显示由format指定的列
        -Y 不要显示进程标记(process flag,表名进程状态的标记)
        -Z 显示安全标签(security context)信息
        -H 用层级格式显示进程(树状,用来显示父进程)
        -n namelist 采用WCHAN列显示的值
        -w 采用宽输出模式,不限制宽度显示
        -L 显示进程中的线程
        -V 显示PS命令的版本号
    • 对常用ps带参数的指令举例:ps -ef

    • 查询结果如下:
      UID PID PPID C STIME TTY TIME CMD
      root 1 0 0 11:29 ? 00:00:01 init [5]

      • 具体表示的含义如下:
        UID 启动这些进程的用户
        PID 进程的进程ID
        PPID 父进程的进程号(如果改进程是由另外一个进程启动的)
        C 进程生命周期中的CPU利用率
        STIME 进程启动时的系统时间
        TTY 进程启动时的终端设备
        TIME 进程运行需要的累计CPU时间
        CMD 启动的程序名称
  • Q56:linux操作系统是怎么监测磁盘空间的?

    • A56:linux文件系统将所有的磁盘都并入到一个虚拟目录下,在使用新的存储媒体前,也需要把它放到虚拟目录下,这项工作称为挂载,可以通过mount指令进行查询。

你可能感兴趣的:(linux操作系统)