操作系统
操作系统相关知识
C++有点难
记录,总结
展开
-
Linux硬盘文件系统
硬盘的每一层分多个磁道,每个磁道分多个扇区,每个扇区是512个字节.iNode与块的存储硬盘分成相同的大小单元,我们称之为块(Block)。一块的大小是扇区大小的整数倍,默认是4K。在格式化的时候,这个值是可以设定的。这样分成一个个小的块,用来存放...原创 2020-07-21 12:02:21 · 130 阅读 · 0 评论 -
Linux文件系统
文件系统的功能规划内存仅仅是一个缓存数据的地方,进程结束之后,应该存在外部存储中。在规划文件系统中需要规划以下几点:文件系统要有严格的组织形式,使得文件能够以块为单位进行存储,这个区域称为存放原始资料的仓库区。文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层。文件应该用文件夹的形式组织起来,方便管理和查询。在文件系统中,每个文件都有一个名字,这样我们访问一个文件,希望通过它的名字就可以找到原创 2020-07-20 21:36:29 · 112 阅读 · 0 评论 -
Linux内存页表
Linux内存的页表管理:在32位系统中,前10位定位具体的页表目录项(总共有1K个页表目录项),一个页表目录项的大小为4K(一个页表项大小为4个字节),定位1K个页表项。中间10位定位具体的页表项,每个页表项对应4K个大小的内存,最后的12位定位具体的位置。在64位系统中,使用的四级的页表定位。STL中map的count和find函数的区别:...原创 2020-07-19 11:33:25 · 205 阅读 · 0 评论 -
linux进程调度
进程调度的方式:A项目中有一条sleep指令或者在等待某个IO事件,就需要主动让出CPU,然后就开始做B项目。A的项目做的时间太长了,项目经理介入,A先停一停然后去做B项目。主动调度,往往是调用schedule函数实现的,又去调用__schedule函数。__shcedule函数的实现在当前的CPU上,取出任务队列rq获取下一个任务,task_struct* next指向下一个任务,这就是继任。因为大多数都是普通进程,所以会调用fair_sched_class.pick_next_task原创 2020-07-18 16:28:56 · 124 阅读 · 0 评论 -
进程中的数据结构下
在程序执行的过程中,一旦涉及到系统调用,就需要进入内核继续执行。那么如何将用户态和内核态的执行串起来。需要下面的两个重要变量:struct thread_info thread_info;void *stack;用户态函数栈栈是一个从高地址到低地址,往下增长的结构。32位: 在CPU中,ESP是栈顶指针寄存器,EBP是栈基地址指针寄存器。函数返回的时候,返回值会保存在EAX寄存器中国,从栈中弹出返回地址,将指令跳转回去,参数也从栈中弹出,然后继续执行A64位: rdi、rsi、rdx、原创 2020-07-16 10:12:02 · 117 阅读 · 0 评论 -
进程数据结构(中)
运行统计信息在进程运行的过程中,会有一些统计量,具体见下面的表,这里面有进程在用户态和内核态消耗的时间,上下文切换的次数等等。u64 utime;//用户态消耗的CPU时间u64 stime;//内核态消耗的CPU时间unsigned long nvcsw;//自愿(voluntary)上下文切换计数unsigned long nivcsw;//非自愿(involuntary)上下文切换计数u64 start_time;//进程启动时原创 2020-07-15 15:56:00 · 202 阅读 · 0 评论 -
Linux进程和线程在内核中的管理
内核中是如何调度进程、线程的在内核中无论是进程的处理方式,还是线程的处理方式,都需要一个统一的管理体系来对其进行管理。在Linux里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构task_struct进行管理。这个结构非常复杂。首先需要一个链表,将所有的task_struct串起来。struct list_head tasks;下面讨论下每个任务包含的字段任务ID每一个任务都应该有一个任务ID,作为任务的唯一标识,task_struct里面涉及的任原创 2020-07-15 14:22:58 · 336 阅读 · 0 评论 -
Linux之线程
为什么要有线程并行执行对任何一个进程来说,进程也是默认有一个主线程的。线程是负责执行二进制指令的,进程要比线程管的多,除了执行指令之外,内存、文件系统等等都要它来管。通俗的来说 进程相当于一个项目,而线程就是为了完成项目需求,而建立的一个一个开发任务。通过创建进程也可以实现并行开发,但是会有一些麻烦创建进程占用的资源太多进程之间的通信需要数据在不同的内存空间传来传去,无法共享应急处理主线程正在一行一行执行二进制命令,突然收到一个通知,要做一点小事情,应该创建一个单独的线程,单独处理这些事情原创 2020-07-14 11:44:36 · 98 阅读 · 0 评论 -
Linux之进程
创建一个函数封装通用的创建进程的函数,process.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> extern int create_process (char* program, char** arg_list); int create_proce原创 2020-07-13 17:31:27 · 127 阅读 · 0 评论 -
LINUX操作系统
Linux系统操作系统基于标准开放的X86平台开发操作系统启动,进入实模式多任务系统,进入保护模式,分用户态和内核态,创建进程管理、内存管理、文件系统管理、输入输出设备管理系统同一个系统进程通信,不同的系统网络通信通过虚拟化、容器化,将原有的操作系统分割成更小的系统,并通过集群管理形成数据中心操作系统学习路径熟悉使用Linux命令行,切换成Linux的“命令行+文件”使用模式《鸟哥私房菜》通过系统调用或者glibc,学会自己进行程序设计《UNIX环境高级编程》Linux内核机制,《深原创 2020-07-09 22:10:46 · 91 阅读 · 0 评论