本节学习重点:
• 认识冯诺依曼系统
• 操作系统概念与定位
• 深⼊理解进程概念,了解PCB
• 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害
• 了解进程调度,Linux进程优先级,理解进程竞争性与独⽴性,理解并⾏与并发
• 理解进程切换,以及Linux2.6 kernel,O(1)调度算法架构
• 理解环境变量,熟悉常⻅环境变量及相关指令, getenv/setenv函数
• 理解C内存空间分配规律,了解进程内存映像和应⽤程序区别, 认识虚拟地址空间。
1.冯诺依曼体系结构
我们常⻅的计算机,如笔记本。我们不常⻅的计算机,如服务器,⼤部分都遵守冯诺依曼体系。
关于冯诺依曼,必须强调⼏点:
• 这⾥的存储器指的是内存
• 不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)
• 外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。
• ⼀句话,所有设备都只能直接和内存打交道。
对冯诺依曼的理解,不能停留在概念上,要深⼊到对软件数据流理解上。
2.操作系统(Operator System)
2.1概念
2.2设计OS的目的
2.3核心功能
• 在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件
2.4理解“管理”
计算机管理硬件
1. 描述起来,⽤struct结构体
2. 组织起来,⽤链表或其他⾼效的数据结构
2.5系统调用和库函数的概念
3.进程
3.1进程概念和基本操作
• 课本概念:程序的⼀个执⾏实例,正在执⾏的程序等
• 内核观点:担当分配系统资源(CPU时间,内存)的实体。
3.1.1描述进程-PCB
3.1.2task_struct
3.1.3查看进程
3.1.4通过系统调用获取进程标识符
3.1.5通过系统调用创建进程-fork初识
3.2进程状态
3.2.1linux内核源代码
3.2.2进程状态查看
3.2.3 Z(zombie)-僵尸进程
Ptrace 详解 - tangr206 - 博客园
3.2.4僵尸进程的危害
3.2.5孤儿进程
3.3进程优先级
3.3.1基本概念
3.3.2查看系统进程
3.3.3 PRI 和 NI
3.3.4 PRI vs NI
3.3.5查看进程优先级的命令
3.3.6 竞争 独立 并行 并发
3.4进程切换
3.4.1Linux2.6内核进程O(1)调度队列
一个CPU拥有一个runqueue,如果有多个CPU就要考虑进程个数的负载均衡问题。
3.4.2优先级
• 普通优先级:100〜139(我们都是普通的优先级,想想nice值的取值范围,可与之对应!)
• 实时优先级:0〜99(不关⼼)
3.4.3活动队列
3.4.4过期队列
3.4.5active指针和expired指针
总结:
在系统当中查找⼀个最合适调度的进程的时间复杂度是⼀个常数,不随着进程增多⽽导致时间成
本增加,我们称之为进程调度O(1)算法!
4环境变量
4.1基本概念
4.2常见环境变量
• PATH : 指定命令的搜索路径
• HOME : 指定⽤⼾的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)
• SHELL : 当前Shell,它的值通常是/bin/bash。
4.3查看环境变量的方法
4.4相关命令
1. echo: 显⽰某个环境变量值
2. export: 设置⼀个新的环境变量
3. env: 显⽰所有环境变量
4. unset: 清除环境变量
5. set: 显⽰本地定义的shell变量和环境变量
4.5环境变量的组织方式
4.6通过代码获取环境变量
4.7通过系统调用获取环境变量
4.8 环境变量通常是具有全局属性的
5.程序地址空间
5.1研究平台
• kernel 2.6.32
• 32位平台
5.2 程序地址空间回顾
5.3虚拟地址
5.4进程地址空间
5.5虚拟内存管理 - 第⼀讲