1.1 linux的组成部分:
- Linux 的内核
- GNU 工具组件 :bash shell 就是其中之一
- 图形化桌面环境
- 应用软件
1.1.1 深入了解Linux 内核
- linux 系统的核心就是linux内核,它控制着所有的硬件和软件,必要时分配硬件,需要时执行软件;LInux 内核主要有四个功能:
- 系统内存管理:
- 软件程序管理
- 硬件设备管理
- 文件系统管理
- 系统内存管理
- linux内核的系统内存管理是linux系统的一项基本功能,但也是重要的功能之一;内核不仅管理物理内存【RAM】,也可以创建和管理虚拟内存【可以认为是交换区间SWAP】,内核可以实现在SWAP和RAM不断的交换内存页面中的内容,这样可以认为实际上linux系统有比物理内存更大的内存空间。
- linux 内存,包括RAM SWAP 会被分成很多块,每一个块成为一个页面【page】;linux内核会把每一个page 放在RAM或SWAP中;然后内核会维护一个内存页面表【page table】,来记录那些内存页面被放到RAM,那些page 被放到SWAP中
- swapping out:内核会把一段时间内没有访问的page 复制到SWAP中,把RAM中的page释放,这个过程成为swapping out
- swapping in: 如果运行的程序需要的内容在swap中,需要把这个内存所在的page cp到RAM ,这个过程叫做swapping in
- 共享内存:在linux系统中每一个进程都有自己的内存页面【page】,进程不能访问其他进程正在访问的内存页面【page】;linux内核也维护着自己的内存区域,为了安全起见,用户进程也不能访问linux内核维护的内存页面。这样为了方面不同的进程可以同时访问同一个内存页面,需要创建一个共享内存【share memery】;这样多个进程可以在这个共享内存page上面进行读、写操作。
- 可以用 ipcs 命令来看linux系统的 share memery
shmid是指共享内存的id,woner 是指创建共享内存的用户,perms是设置这个共享内存的使用权限。------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x01014360 3440642 ads 777 33060 572 0x01014361 133693444 ads 777 33554432 22 0x01014362 133726213 ads 777 33554432 22 0x01014363 133758982 ads 777 33554432 22 0x01014364 133791751 ads 777 33554432 22 0x01014365 133824520 ads 777 33554432 22
- cat /proc/meminfo
MemTotal: 49448420 kB RAM 的大小
MemFree: 449904 kB 空闲的RAM
Buffers: 767392 kB
Cached: 42623216 kB 缓存的大小;虽然RAM基本用完,但大部分是cached 这个是缓存,可以随时释放,这个正常的现象,不是内存泄漏
SwapCached: 0 kB
Active: 14387852 kB
Inactive: 33254860 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 49448420 kB
LowFree: 449904 kB
SwapTotal: 8388600 kB SWAP 空间的大小,只有在RAM 不够用的时候在会用SWAP 的空间
SwapFree: 8388392 kB
Dirty: 856 kB
Writeback: 0 kB
AnonPages: 4252068 kB
Mapped: 1446864 kB
2. linux系统软件程序管理
- linux系统中运行的程序叫进程【process】,process可以在前台运行,将运行结果显示在屏幕上,也可以在后台运行;linux内核控制着linux系统如果管理运行在系统上的所有进程。linux系统在启动时,内核创建了一个进程init,pid=1;当内核启动时她会将init进程加到虚拟内存中;内核在启动其他进程时会在虚拟内存中给新进程分配一个块【page】来存储次进程的数据和代码
- LInux现在用一个表来管理在系统开机时自启动的进程,在linux系统中这个表通常位于/etc/inittab 文件中
- LInux启动分5个级别: 1 单用户级别 3 多用户级别 5 x shell 级别
ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:07 init [3]
2 ? S< 0:02 [migration/0] ---->这种带中括号的说明:此进程因为一段时间没有访问,它的page已经被swapping out了
3 ? SN 0:00 [ksoftirqd/0]
4 ? S< 0:00 [watchdog/0]
5 ? S< 0:01 [migration/1]
6 ? SN 0:00 [ksoftirqd/1]
7 ? S< 0:00 [watchdog/1]
5737 ? Ss 0:00 ./Process -c /home/......./......conf start --->这些进程的page不断的访问,page一直在RAM里面
5740 ? S 25:22 ./Process -c /home/......./......conf start
5741 ? S 25:22 ./Process -c /home/......./......conf start
S: sleep 睡眠状态、SW睡眠等待状态 、 R代表运行状态 initd 是睡眠状态
3. 硬件设备管理:
内核的第三个任务是管理硬件设备:任何的linux都需要跟硬件设备通信,都需要在硬件设备中加入驱动程序,驱动程序好比内核和硬件之间的中间人;现在的linux系统会支持所有的硬件;linux系统把硬件设备当成特殊的文件,成为设备文件;设备文件有三种:
- 字符型设备文件: c 指处理数据时每次只能处理一个字符的设备 大多数的调制调节器【默认信号 ---->0 1 的数字信号】
- 块设备文件 : 处理数据时每次能处理大块数据的设备: 硬盘
- 网络设备文件:网络设备是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备【/dev/loop0 /dev/loop1】
- linux 系统对每一个设备文件都会创建一个节点,linux内核与设备的所有通信都是通过设备节点来完成的。