现代操作系统:Linux(10)

Linux

Linux的设计目标

系统应尽量简单、优雅,并且具有一致性。
比如,文件应该只是一个字节的集合,而不是为了实现顺序存取、随机存取、按键存取等设计不同类型的文件。


系统应具有较强的功能性和灵活性,而每个程序只做一件事并且把它做好。


不要没用的冗余,例如如果cp可以胜任,就不需要另外一个copy指令。

到Linux的接口

这里写图片描述
一个Linux系统从里到外可分为:

  1. 硬件(CPU、内存、磁盘、显示器、键盘等);
  2. 操作系统(进程管理、存储管理、文件系统、I/O);
  3. 标准库函数,实现系统调用(open、close、read、write、fork等);
  4. 标准应用程序,包括命令处理器(shell)、编译器、编辑器以及文件操作工具。

因此,我们可以说Linux有三种不同的接口:真正的系统调用接口、库函数接口、标准应用程序构成的接口


大多数Linux发行版只不过是把上述的面向键盘的用户界面替换为面向鼠标的图形用户界面,而没有修改操作系统本身。
Linux上比较流行的GUI包括GNOME(GNU网络对象模型环境)和KDE(K桌面环境)。Linux上的GUI由X窗口系统所支持,它负责定义类UNIX系统中基于位图显示的操作窗口的通信和显示协议。

shell

大多数程序员都更愿意使用一个命令行界面,称作shell。当shell被启动时,它初始化自己,然后在屏幕上输出一个提示符,通常是一个%或者$,并等待用户输入命令行。


当用户输入一个命令行后,shell提取其中的第一个字,假定这个字是要运行的程序名,搜索被运行之,shell挂起直到程序运行完毕。
注意,shell也只是一个用户程序,它仅仅需要从键盘读取数据、向显示器输出数据和运行其他程序的能力。
命令中还可以包含参数,如

cp src dest
   
   
  • 1

它表示创建src文件的副本,命名为dest。
另外,负责控制一个命令的操作或者指定一个可选数值的参数称为标志(flag),由一个破折号标记。例如

head -20 file
   
   
  • 1

表示通知head程序输出file中的前20行,而不是默认的10行。而

head 20 file
   
   
  • 1

则是输出文件名为20和文件名为file的前10行,两者的意义是不同的。


为了更容易地指定多个文件名,shell支持魔法字符/通配符,例如一个*可以匹配所有可能的字符串,因此

ls *.c
   
   
  • 1

告诉ls列举出所有文件名以.c结束的文件。
另一个通配符是问号,它负责匹配在中括号中的字符的任意一个,如

ls [ape]?
   
   
  • 1

列举出所有以a或p或e开头的文件。


标准输入和输出可以重定位,对标准输入进行重定位使用“<”加上一个输入文件名。类似的,标准输出使用“>”。例如:

sort <in >out
   
   
  • 1

表示sort从文件in读取输入,并把结果输出到文件out中。标准错误因为没有被重定位,所以还是输出到屏幕中。
从标准输入中读取数据,并输出到标准输出的程序称为过滤器


常常有把命令行中前一个程序的输出作为下一个程序的输入的情况,Linux提供了管道符 |。例如:

sort <in | head -30
   
   
  • 1

告诉程序从sort得到输出并将其作为输入传给head,由此消除了使用一个临时文件的过程。
由管道符连接起来的命令,称为一个管线(pipeline),它可以包含任意多的命令,如:

grep ter *.t | sort | head -20 | tail -5>foo
   
   
  • 1

表示先将所有以.t结尾的文件中包含“ter”的行写到标准输出中,然后排序,然后将这些内容的前20行传给tail,tail又将最后5行传给foo。


Linux是通用多道程序设计系统,一个用户可以同时运行多个程序,每一个作为一个独立的进程存在。后台运行一个程序的语法是在原本命令后加一个“&”,如

wc -l <a >b &
   
   
  • 1

Linux应用程序

shell包含大量的标准应用程序,这些程序可以大致分为6类:

  • 文件和目录操作命令
  • 过滤器
  • 程序设计工具,如编辑器和编译器
  • 文档处理
  • 系统管理
  • 其他

首先是文件和目录操作:

cp a b
   
   
  • 1

将文件a移动到b,不改变原文件,而

mv a b
   
   
  • 1

将文件a移动到b并删除原文件。
cat命令可以把多个文件的内容连结起来。
rm命令删除文件。
chmod命令可以修改文件的访问权限。
……


过滤器也有很多:
grep提取包含特定模式的行;
sort将输入排序;
head提取输入的前几行;
tail提取输入的后几行;
od将二进制输入转换成ASCII文档;
tr实现字符大小写转换。


编译器和程序设计工具包括gcc(调用C语言编译器)以及ar(将库函数收集到存档文件中)。
make则负责维护大的程序,它跟踪原文件和头文件,安排编译。

内核结构

这里写图片描述
在内核的最底层,有中断处理程序和底层的进程分配机制。
接着,将内核系统分为三个主要部件:虚拟文件、内存管理、进程管理
处在最顶层的是到内核的系统调用接口,其导致一个陷阱,并将系统从用户态转换到受保护的内核态,继而将控制权交到上述的3个核心部件之一。

Linux中的进程

基本概念

即使用户退出登录,仍然有后台进程运行,它们被称为守护进程。在系统启动时,守护进程就被shell脚本开启。
进程创建十分简单,系统调用fork创建一个与原始进程(父进程)完全相同的进程副本(子进程)。fork会给父进程返回一个非零值,而给子进程一个零值,父进程的非零值是子进程的进程标识符(PID)
Linux系统中的进程可以通过管道进行通信,一个进程向管道写入字节流,另一个进程从这个通道中读取字节流。
shell中的管线就是用管道技术实现的。


进程还可以通过信号通信,一个进程只可以向它所在的进程组(进程树)发送信号。

Linux中进程与线程的实现

在Linux中,进程通过数据结构task_struct描述其上下文。一个单线程的进程只有一个task_struct,而一个多线程的进程将为每个用户级线程分配一个task_struct
对于每个进程,一个类型为task_struct进程描述符始终存在于内存中,它包含了进程所需的全部重要信息,具体如下:

  • 调度参数。包括进程优先级、最近消耗的CPU时间、最近睡眠时间。
  • 内存映射。指向代码、数据、堆栈段或页表的指针。
  • 信号。
  • 机器寄存器。
  • 系统调用状态。
  • 文件描述符表。
  • 统计。指向记录用户、进程占用系统CPU时间的表的指针。
  • 内核堆栈。
  • 其他。

Linux中的调度

首先要认识到,Linux系统的线程是内核线程,所以系统调度是基于线程的,而不是基于进程的。
Linux将线程区分为三类:

  1. 实时先入先出
  2. 实时轮转
  3. 分时

Linux中的I/O系统

Linux把设备当做一种特殊文件整合到文件系统中,每个I/O设备都被分配了一条路径,通常在/dev目录下。例如,一个磁盘的路径可能是/dev/hd1,一个打印机的路径可能是/dev/lp,网络的路径可能是/dev/net
可以用普通的系统调用,如open、read、write等系统调用访问这些特殊文件。
特殊文件(设备)分为两类,块特殊文件和字符特殊文件。
块特殊文件由一组具有编号的块组成,块特殊文件的主要特性是:每个块都能够被独立地寻址和访问。磁盘就是典型应用。
字符特殊文件通常用于表示输入和输出字符流的设备,键盘、打印机、网络、鼠标等都使用字符特殊文件来表示。

网络

网络通信的关键概念是套接字。套接字与邮筒是类似的,套接字允许用户连接到网络,正如邮筒允许用户连接到邮政系统。
套接字可以被动态创建和销毁。一旦连接建立成功,它的功能就类似于管道,一个进程可以使用本地套接字的文件描述符从中读写数据。当此连接不再需要时,通过close系统调用来关闭它。

Linux文件系统

挂载:当存在多个磁盘时,Linux允许一个磁盘挂载到另一个磁盘的目录树上,挂载之后,用户能够看见一个目录树,而不必关心文件在哪个设备上。


加锁:两个或多个进程使用同一个文件时,可能导致竞争。Linux提供了两种锁:共享锁和互斥锁。如果文件的一部分已经被加了共享锁,那么在上面尝试加共享锁是允许的,但是加互斥锁是不会成功的;
如果文件的一部分已经被加了互斥锁,那么在互斥锁解除之前加任何锁都不会成功。

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值