操作系统主要功能
进程管理(CPU管理)
进程控制:创建,暂停,唤醒,撤销
进程调度:调度策略,优先级
进程通信:IPC
内存管理
内存分配
内存共享
内存保护
虚拟内存
设备管理
设备的分配和调度
设备无关性操作
设备传输控制
设备驱动
文件管理
存储空间管理
文件目录操作
文件目录权限管理
分时操作系统
CPU分为时间片处理
中断技术(处理外部信号)
通道技术(外设和内存之间数据传输)
适合学习的小型操作系统Minix OS
实战
Linux系统编译视频教程 https://www.bilibili.com/video/av50757124?p=11
MBR程序编写 https://blog.csdn.net/u011391093/article/details/51701602
线程
临界资源:一次只允许一个线程独占访问的资源。
临界区:线程中访问临界资源的程序段。
> 临界区尽可能小
临界区访问机制四个原则:
- 忙则等待
- 空闲让进
- 有限等待
- 让权等待
进程同步
合作进程中某些操作之间需要满足某种先后关系或某个操作能否进行需要满足某个前提条件,否则只能等待。
> 互斥关系属于特殊的同步关系。
信号量:允许指定数目的线程访问临界区
死锁:两个或多个进程无限期地等待永远不会发生的条件的一种系统状态。
大小端
小端:低位在低字节,强制转换数据类型时不需要再调整字节了。
大端:有符号数,字节最高位不仅代表数据本身,还起到了符号的作用。符号位固定为第一字节,也就是最高位占据的低地址,符号可以直接取出,容易判断正负。
启动过程
上电 -> POST -> BIOS -> MBR -> OBR
POST:Power On Self Test (上电自检)
BIOS:Basic Input Output System ,主板ROM中的程序
MBR:Main Boot Record,整个硬盘最开始的扇区,512个字节
MBR引导扇区内容:466字节引导程序及参数 + 64字节分区表 + 2字节结束标记(0x55aa)
OBR:OS Boot Record , 操作系统引导记录
进程调度
目标:
1.响应速度尽可能快
2.进程处理时间尽可能短
3.系统吞吐量尽可能大
4.资源利用率尽可能高
5.对所有进程公平
6.避免饥饿
7.避免死锁
PCB 进程控制块
Process Control Block
记录进程相关信息,方便操作系统调度
静态地址映射
物理地址=装入内存基址+偏移地址
特点:
1.程序运行之前确定映射关系
2.装入内存后不能移动
3.连续地址空间
动态地址映射
执行过程中将逻辑地址转换物理地址
特点:
1.程序占用内存空间可动态变化(变化后需要更新基址)
2.不要求占用连续的地址空间(分段,记录每段的基址)
3.便于多个进程共享代码
分区内存管理
单一分区
不分区,完全被一个程序占用 DOS
固定分区
特点:
浪费内存,程序比分区小
大程序无法运行,程序比最大分区大
动态分区
特点:
分区大小和个数可变
存在大量分区碎片
内存交换
原理
内存不够时把进程写到磁盘(Swap Out)
进程要运行时重新写回内存(Swap In)
系统调用 sys_call
0x80号中断
文件系统
Fat 文件系统按4k/32k块大小存储,每个块指向下一个块地址
Ext文件系统 存储文件索引inode,inode数量即为文件数量
df -i 查看inode利用率
```
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 501640 367 501273 1% /dev
tmpfs 504897 1806 503091 1% /run
/dev/vda1 5120000 366201 4753799 8% /
tmpfs 504897 1 504896 1% /dev/shm
tmpfs 504897 5 504892 1% /run/lock
tmpfs 504897 18 504879 1% /sys/fs/cgroup
tmpfs 504897 16 504881 1% /run/user/1000
```
tune2fs命令查看文件系统参数
```
tune2fs 1.44.1 (24-Mar-2018)
Filesystem volume name: cloudimg-rootfs
Last mounted on: /
Filesystem UUID: 4eccdc19-27d9-4015-83f0-510c1bfd6b9f
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 5120000
Block count: 10485499
Reserved block count: 0
Free blocks: 7502787
Free inodes: 4864438
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 125
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 16000
Inode blocks per group: 1000
Flex block group size: 16
Filesystem created: Tue Nov 6 16:34:21 2018
Last mount time: Sun Dec 22 20:49:01 2019
Last write time: Sun Dec 22 20:48:38 2019
Mount count: 48
Maximum mount count: -1
Last checked: Tue Nov 6 16:34:21 2018
Check interval: 0 (<none>)
Lifetime writes: 8 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 20869
Default directory hash: half_md4
Directory Hash Seed: 01a74427-a2d0-44f4-827d-af3dc495c8a3
Journal backup: inode blocks
```
网友评论