Linux内核基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fork返回时会为父子进程各返回两个不同的值(区分父子进程) 为父进程返回的值是新建子进程的PID,而为子进程返回的值是0
Linux进程管理
• • • • • • • • • • • • • • • • • • fork实例 #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main() { pid_t pid; printf(“%/d\n”, getpid()); pid = fork(); if(pid == 0) { printf(“child process ID is%d\n”, getpid()); } else { printf(“father process ID is%d\n”, getpid()); } return 0; }
•
Linux文件的访问权限
多用户(所有者、同组用户、其他用户 ) 多权限(可读、可写、wenku.baidu.com执行)
Linux文件管理
•
1. 2. 3. 4. 5.
Linux文件分类
普通文件(文本文件(ASCII、Unicode编码 、二进制文件(自定义)) 目录文件 链接文件 管道文件 设备文件 设备文件(块、字符)存储在目录/dev中,比如鼠标的设备文件是 /dev/input/mouse ,第一块IDE硬盘的设备文件是/dev/had等
• 系统调用的使用方法
通过API或shell命令调用系统调用
• 系统调用实现
根据系统调用号(arch/$(ARCH)/include/asm/unistd.h) 在系统调 用表中调用具体的处理函数 (为什么有多个unistd.h)
Linux进程管理
• Linux进程控制块
进程控制块(PCB,process control block)的载体是结构体task_struct (include/linux/sched.h ) task_struct结构体的成员主要有状态信息、链接信息等 1. 状态信息:运行态 、就绪态 、暂停态 2. 链接信息 :进程标示符PID(32位)
Linux内核基础
吴士力 e-mail: wsl.wushili@gmail.com
Linux内核概述
• Linux内核物理结构
Linux内核分为系统调用接口、内核子系统和设备驱动
Linux内核概述
• Linux内核逻辑结构
Linux系统调用
• Linux系统调用概述
由内核提供的对软硬件资源进行控制和使用的各类服务称 为系统调用 核心态、用户态
•
Linux文件的访问权限
多用户(所有者、同组用户、其他用户 ) 多权限(可读、可写、可执行)
实时Linux
• • 什么是实时
在指定的时间范围内完成指定的事情
Linux内核的实时性质
1.任务调度与内核抢占 (低优先级进程退出临界区后,高进程运行) 2.中断延迟 (中断可以抢占高优先级进程,使得进程运行时间不确定) 3.时钟精度 (内核时钟是毫秒级,精度不够) 4.其他延迟 (内存管理等模块会产生各种延迟)
Linux 守护进程
• • 守护进程的概念
守护进程是脱离于终端并且在后台运行的进程
创建守护进程的步骤
1、创建新进程 、 2、在新进程中创建新会话(重要的 、在新进程中创建新会话(重要的setsid ) 3、改变当前目录为根目录 、 4、重设文件权限掩码 、 5、关闭文件描述符 、
Linux内存管理
•
Linux内核的实时化
1.双内核方式 (RTLinux) 2.补丁方式(Kurt-Linux )
• 谢谢大家!
• • Linux内存管理概述
系统进程(专用1G)和用户进程(共享3G)
用户进程空间组成
•
物理内存空间组成
Linux文件管理
•
1. 2. 3. 4. 5.
Linux文件分类
普通文件(文本文件(ASCII、Unicode编码 、二进制文件(自定义)) 目录文件 链接文件 管道文件 设备文件 设备文件存储在目录/dev中,比如鼠标的设备文件是 /dev/input/mouse ,第一块IDE硬盘的设备文件是/dev/had等
Linux进程管理
• Linux进程链表
在多道系统的内存中就会同时存在多个PCB。为了便于管理,内核 把所有的PCB通过链表组织起来,这种链表称为进程链表。
可运行队列
Linux进程管理
• Linux进程的创建
进程的创建是通过复制(fork)父进程为实现基础的 。
1.调用alloc_task_struct函数获得用于存放新进程PCB以及内核栈的内存空间; 2.把父进程的PCB复制到当前新进程的PCB中。此时父子两进程的PCB内容是相 同的; 3.调用get_pid函数获得PID; 4.更新不能与父亲进程相同的PCB信息,如进程间的亲属(父子兄弟)关系; 5.根据进程是否内含线程,复制或共享父进程使用的资源; 6.把新进程的PCB插入进程链表中; 7.把进程的状态改变成为可运行态; 8.返回新进程的PID;