认识LINUX
ฅ'ω'ฅ♪

认识Linux

什么是Linux

Linux是类Unix计算机操作系统的统称。

严格地说,Linux只是操作系统的内核,使用c语言和汇编语言写成,符合POSIX标准。

基于Linux内核的完整操作系统被称为Linux操作系统。

  1. 内核免费,众多发行版免费。
  2. 兼容POSIX 1.0。
  3. 自由开源,可以高度定制环境。

特点

  1. 多用户多任务系统。
  2. 同时拥有字符界面和图形界面。
  3. 丰富便于拓展的网络功能。
  4. 可靠的安全,稳定的性能。
  5. 配置的更改可以在系统运行时完成且不影响不相关的服务。
  6. 相比Windows,不需要经常进行碎片整理。
  7. 对多个平台良好的支持性。
  8. 可以运行在多种硬件平台上,同时也支持多处理器技术。
  9. 进程具有父子层次结构,有各种signal能处理父子进程之间的结束事件。

Linux系统的组成

  1. Linux内核(Linus团队管理)
  2. shell:用户与内核交互的接口。
  3. 文件系统:ext3、ext4等。
  4. 第三方应用。

本人用的是Ubuntu LTS 18.04.4

一款基于Debian派生的系统,对新硬件有极强的兼容能力。

界面友好,容易上手,对硬件支持也比较全面,也拥有强大的社区力量。

Linux中的某些概念

超级用户 用户名为root,可以使用系统内所有资源,管理所有资源 一切都是文件

在Linux中,目录、文件、设备等都被看做文件,共同构成了Linux的文件系统。而且在Linux中,无盘符的概念。

基本哲学

一切皆文件

普通文件、目录、字符设备、块设备、套接字等等都在Linux中以文件方式被对待

VFS原理

VFS可以衔接各种文件系统,

原因是其抽象出了通用的文件系统模型。

新加入的文件系统只需实现对应的接口并注册,即可使用。

例:调用write()系统的过程

  1. 勾起VFS的sys_write()处理。
  2. sys_write()根据_filedat找到所在文件系统提供的写入操作函数.op_write()
  3. 调用write()写入实际数据。

再者,Linux用户程序可以通过

read()

来读取 ext3,NFS,XFS等文件系统的文件,也可以读取存储在 SSD,HDD等不同存储介质的文件,无须考虑不同文件系统或者不同存储介质的差异。

超级块

用于存储文件系统的元信息

super_block
//定义在<linux/fs.h>中
//索引节点信息
//挂载标志
//操作方法s_op
//安装权限
//文件系统类型、大小、区块数目

当VFS需要对超级块进行操作时,首先要在超级块的操作方法 s_op 中,找到对应的操作方法后再执行。

比如

superblock->s_op->write_supper(sb);

创建文件系统时,其实就是往存储介质的特定位置。

写入超级块信息;而卸载文件系统时,则由VFS调用释放超级块。

索引

索引节点对象包含Linux内核在操作文件、目录时,所需要的全部信息,

inode
//定义在<linux/fs.h>中
//超级块相关信息
//目录相关信息
//文件大小、访问时间、权限相关
//引用计数

目录

  1. /bin 包含一些二进制文件的目录,即一些可以运行的应用程序。
  2. /boot 包含启动系统所必需的文件。
  3. /dev 包含设备文件,很多是启动时或是运行时生成的。
  4. /etc 包含大部分的系统配置文件。
  5. /home 包含个人目录。
  6. /lib 库文件所在的地方。
  7. /media 在插入外部存储器并试图访问时,将会被自动挂载。
  8. /mnt 一些过去的残余文件。
  9. /opt 通常是编译软件的地方。
  10. /proc 同样是一个虚拟目录,它包含有关计算机的信息,例如关于CPU和Linux系统正在运行的内核的信息。
  11. /root 是系统的超级用户的主目录。
  12. /run 是另一个新出现的目录。系统进程出于某些不可告人的原因需要存储临时数据的目录。
  13. /srv 包含服务器的数据。
  14. /sys 同样是一个虚拟目录,包含连接到计算的设备的信息。
  15. /tmp 包含临时文件。

VFS系统把目录当做文件对待

dentry
//定义在<linux/dcache.h>中
//父目录项对象地址
//子目录项链表
//目录关联的索引节点对象
//目录项操作指针

文件

文件对象是进程打开的文件在内存中的实例。

通过open()系统调用来打开一个文件,

通过close()系统调用来关闭一个文件。

file结构体表示,定义在<linux/fs.h>中,

  1. 文件操作方法
  2. 文件对象引用计数
  3. 文件指针偏移量
  4. 读写标识符

只有当进程打开文件时,才会在内存中产生一个文件对象。

每个进程都有自己打开的一组文件,

file_struct结构体标识,由进程描述符中的files字段指向,

  1. fdt
  2. fd_array[NR_OPEN_DEFAULT]
  3. 引用计数

fd_array数组指针指向已打开的文件对象,

如果打开的文件对象个数 > NR_OPEN_DEFAULT,

内核会分配一个新数组,并将 fdt 指向该数组。

参考文献:

[1](美)博韦,西斯特.深入理解Linux内核[M].北京:中国电力出版社,2007.

[2]Robert Love.Linux内核设计与实现[M].北京:机械工业出版社,2011:207-220.

[3](美)理查德·史蒂文斯、(美)拉戈.UNIX环境高级编程[M].北京:人民邮电出版社,2006.

CANCEL

-评论-

Here you can post what you want to say, if you have more information please contact me by the following way.

-昵称-
-QQ-
-邮箱-
想说些什么?
-SUBMIT-

-电联 Phone-

+86 18520664652

-邮箱 Email-

boogieLing_o@163.com

boogieLing_o@qq.com

Your name. OS platform Browser model

What do you want to say?

created time

游說萬乘苦不早,著鞭跨馬涉遠道。

阿凌的貓爬架

幸會,

激活Ubuntu

转到“设置”以激活Ubuntu。

R0's board.