linux系统架构

Linux系统从应用角度来看,分为内核空间和用户空间两部分。内核空间是Linux操作系统的主要部分。

Linux内核主要模块

Linux内核由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。

进程调度SCHED

进程调度指系统对进程的多种状态之间转换的策略。Linux进程调度主要有三种策略:SCHED_OTHER、SCHED_FIFO和SCHED_RR。

  1. SCHED_OTHER分时调度策略(默认),针对普通进程的时间片轮转调度策略。系统给所有的运行状态的进程分配时间片。在当前进程的时间片用完后,系统从进程中优先级高的进程中选择进程运行。
  2. SCHED_FIFO实时调度策略,先到先服务,针对运行的实时性要求比较高、运行时间短的进程调度策略。系统按照进入队列的先后进行进程的调度,在没有更高优先级到来或者当前进程没有因为等待资源而阻塞的情况下,会一直运行。
  3. SCHED_RR实时调度策略,时间片轮转,针对实时性比较高、运行时间长的进行调度策略。SCHED_RR和SCHED_OTHER相似,但SCHED_RR的优先级要高的多。系统分配给SCHED_RR进程时间片,然后轮循进程,将时间片用完的进程放在队列末尾。

由于存在多种调度方式,Linux进程调度采用“有条件可剥夺”的调度方式。普通进程中采用SCHED_OTHER的时间片轮询方式,实时进程可以剥夺普通进程。如果普通进程在用户空间运行,则普通进程立即停止运行,将资源让给实时进程;如果普通进程在内核空间,则需要等系统调用返回用户空间后方可剥夺资源。

内存管理MMU

内存管理时多个进程间共享内存的策略。在Linux中内存管理主要概念是虚拟内存。虚拟内存让内存可以使用比实际物理内存更大的内存,每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。虚拟内存的分配策略是每个进程都可以公平地使用虚拟内存。

虚拟文件系统VFS

Linux支持多种文件系统。最常见的文件格式是ext2和ext3。ext2文件系统用于固定文件系统和可活动文件系统,是ext的扩展。ext3是ext2上增加日志功能后的扩展。ext2和ext3可以互相转化。

网络接口

Linux支持多种网络接口和协议。网络接口分为网络协议和驱动程序,网络协议是网络传输的通信标准,驱动程序是对硬件设备的驱动程序。

进程间通信

Linux下进程通信方式:管道、信号、消息队列、共享内存、套接字

Linux文件系统

Linux操作系统文件结构的开始是一个顶级目录结构,叫做根目录

1
2
3
[CaseZheng@VM_187_252_centos /]$ cd /
[CaseZheng@VM_187_252_centos /]$ ls
bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

根目录下常用目录作用:

  1. /bin Binary存放经常使用的命令
  2. /boot 存放启动linux时需要使用的核心文件,包括连接文件和镜像文件
  3. /dev Device存放Linux的外部设备
  4. /etc 存放所有系统管理所需要的配置文件和子目录
  5. /home 用户家目录
  6. /lib 存放系统最基本的动态链接库
  7. /lost+found 一般情况下是空的,当系统非法关机,存放一些文件
  8. /media linux系统自动识别一些设备,当识别后会将识别的设备挂载在这个目录下
  9. /mnt 专门给外挂的文件系统使用
  10. /opt 可选的应用程序软件包
  11. /proc 虚拟目录,系统内存的映射,可直接访问该目录获取系统信息,这个目录内容在内存中,而不是硬盘。
  12. /root 根用户的主目录
  13. /sbin 存放系统管理员使用的系统管理程序
  14. /selinux Redhat/CentOS特有目录,Selinux是安全机制,比较复杂,该目录用于存放selinux相关文件。
  15. /src 存放一些服务启动后需要提取的数据
  16. /sys 该目录下安装sysfs文件系统,sysfs文件系统集成了3中文件系统信息:针对进程信息的proc文件系统、针对设备的devfs文件系统、针对伪终端的devpts文件系统,该文件系统是内核设备的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  17. /var 包含系统定义表,以便在系统运行改变时只备份该目录
  18. /tmp 用于临时性存储
  19. /usr 用户的很多应用程序和文件放在该目录下
  20. /usr/bin 系统用户使用的应用程序
  21. /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序
  22. /usr/src 内核源代码默认的放置目录
  23. /usr/lib 库文件