标签:domain \n 保存 系统 其他 har 核函数 lib 还需
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
(1)内核
内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。Linux内核的模块分为以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信、系统的初始化和系统调用等。
(2)shell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
(3)文件系统
文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、EXT3、FAT、FAT32、VFAT和ISO9660。
(4)应用程序
标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、XWindow、办公套件、Internet工具和数据库等。
(1)什么是进程
进程是处于执行期的程序以及它所包含的所有资源的总称,包括虚拟处理器,虚拟空间,寄存器,堆栈,全局数据段等。
在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制(Process Control Block,简称PCB)。PCB中包含了很多重要的信息,供系统调度和进程本身执行使用。所有进程的PCB都存放在内核空间中。PCB中最重要的信息就是进程PID,内核通过这个PID来唯一标识一个进程。PID可以循环使用,最大值是32768。init进程的pid为1,其他进程都是init进程的后代。
除了进程控制块(PCB)以外,每个进程都有独立的内核堆栈(8k),一个进程描述符结构,这些数据都作为进程的控制信息储存在内核空间中;而进程的用户空间主要存储代码和数据。
(2)进程创建
1 #代码示例: 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 6 int main (int argc, char ** argv) { 7 int flag = 0; 8 pid_t pId = fork(); 9 if (pId == -1) { 10 perror("fork error"); 11 exit(EXIT_FAILURE); 12 } else if (pId == 0) { 13 int myPid = getpid(); 14 int parentPid = getppid(); 15 16 printf("Child:SelfID=%d ParentID=%d \n", myPid, parentPid); 17 flag = 123; 18 printf("Child:flag=%d %p \n", flag, &flag); 19 int count = 0; 20 do { 21 count++; 22 sleep(1); 23 printf("Child count=%d \n", count); 24 if (count >= 5) { 25 break; 26 } 27 } while (1); 28 return EXIT_SUCCESS; 29 } else { 30 printf("Parent:SelfID=%d MyChildPID=%d \n", getpid(), pId); 31 flag = 456; 32 printf("Parent:flag=%d %p \n", flag, &flag); // 连地址都一样,说明是真的完全拷贝,但值已经是不同的了.. 33 int count = 0; 34 do { 35 count++; 36 sleep(1); 37 printf("Parent count=%d \n", count); 38 if (count >= 2) { 39 break; 40 } 41 } while (1); 42 } 43 44 return EXIT_SUCCESS; 45 }
内核把所有处于TASK_RUNNING状态的进程组织成一个可运行双向循环队列。调度函数通过扫描整个可运行队列,取得最值得执行的进程投入执行。避免扫描所有进程,提高调度效率。
#进程调度使用schedule()函数来完成,下面我们从分析该函数开始,代码如下: 1 asmlinkage __visible void __sched schedule(void) 2 { 3 struct task_struct *tsk = current; 4 5 sched_submit_work(tsk); 6 __schedule(); 7 } 8 EXPORT_SYMBOL(schedule);
#在第4段进程调度中将具体讲述功能实现
标签:domain \n 保存 系统 其他 har 核函数 lib 还需
原文地址:https://www.cnblogs.com/mbd1314/p/8976649.html