![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 71
wrx1721267632
这个作者很懒,什么都没留下…
展开
-
存储器层次结构
我们知道,一个简单的计算机系统模型是CPU执行指令,而存储器为CPU存放指令和数据。 在简单模型中,存储器系统是一个线性的字节数组,CPU能够在常数时间范围内访问每个存储器位置。这样的一个简单模型并不能有效地反映现代系统实际工作的方式。实际上,存储器系统是一个具有不同容量,成本和访问时间的存储设备的层次结构。CPU寄存器保存着最常用的数据。靠近CPU的小的快速的高速缓存存储器作为一部分转载 2016-05-15 22:26:29 · 1750 阅读 · 0 评论 -
Linux Kernel 2.6进程调度的分析
第一章 Kernel 2.4存在的不足根据对2.4进程调度的分析,我们总结出看出2.4内核总的特点就是: 内核调度简单有效 内核不可抢占但是经过对2.4内核的分析,我们也明显看到了它的缺点:1.调度算法复杂度是O(n),与系统负荷关系较大。而且调度算法在设计上也有缺陷,比如:(1) 2.4进程调度只设置了一个进程就绪队列,这样有的进程用完了自转载 2015-11-30 15:30:40 · 1107 阅读 · 0 评论 -
进程的调度
调度算法所考虑的几方面:(1)公平:保证每个进程得到合理的CPU时间。(2)高效:使CPU保持忙碌的状态,即总有进程在CPU上运行(3)响应时间:是交互用户的响应时间尽可能短。(4)周转时间:使批量用户等待输出的时间尽可能短。(5)吞吐量:使单位时间处理的进程尽可能多。很显然,我们并不能让五个目标同时达到最好,所以,不同的操作系统会在这几个方面有所权衡。以此确定自己满意的调原创 2015-11-30 15:26:11 · 306 阅读 · 0 评论 -
进程状态
操作系统为了对进程进行管理,就必须对每个进程在其生命周期内涉及的所有事情进行全面的描述,而所有这些信息在内核中可以用一个结构体来描述———linux中把对进程的描述结构叫做task_struct。传统上,这样的数据结构叫做进程控制块PCB。Linux中PCB是一个庞大的结构体。(具体包含什么可上网自行查询)在进程的整个生命周期中,系统(也就是内核)总是同过PCB对进程进行控制的,也就是说,系统原创 2015-11-29 15:28:11 · 589 阅读 · 0 评论 -
互斥锁问题
互斥锁保证每时刻每个用户看到的共享数据是一样的。只有lock与unlock两种状态,确保同一时间只有一个线程访问数据。在同一时间通常只允许一个线程执行部分代码。使用互斥锁前必须进行初始化操作。(1)pthread_mutex_t = PTHREAD_MUTEX_INITIALIZER;(2)int pthread_mutex_init (pthread_mutex_t *mutex原创 2015-07-30 15:16:13 · 940 阅读 · 0 评论 -
fork与vfork的区别
fork与vfork都可以创建一个进程,但vfork是由fork封装得来的。其实fork创建的子进程相对独立,当用fork后子进程与父进程同时各自进行自己的程序互不影响,但只有一个终端接受他们两个的输出,所以并不是子进程与父进程随机调用,而只是在同时执行父进程和子进程,只是随机输出,子进程与父进程仍各自有序。(1)使用fork创建一个进程时,子进程只是完全复制父进程的资源。这样得到的子进程原创 2015-07-21 20:21:56 · 872 阅读 · 0 评论 -
转载有关孤儿进程和僵尸进程
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的转载 2015-07-21 17:29:44 · 321 阅读 · 0 评论 -
文件小结
对文件学习有了一定的了解,想整理一下文件所学所用到的一些函数。1. 在设计程序是可依靠上述两个函数对文件访问权限进行修改。 由shell命令中man 2 chmod可看出chmod和fchmod的区别就是对文件的操作中chmod以文件名为条件,而fchmod以文件描述符做条件。 然后凭借第二参数mode对文件修访问权限进行指定的修改,其上便是mode原创 2015-07-21 08:42:05 · 278 阅读 · 0 评论 -
进程的用户空间管理
首先内核通过映射即值把进程的虚拟地址映像到物理地址,在进程运行时,如果内核发现进程要访问的页没有在物理内存时(却页异常),就发出了请页要求;如果有空闲的内存可供分配,就要请求分配内存(于是用到了内存的分配和回收),并把正在使用的物理页记录在页缓存(使用了缓存机制);如果没有足够的内存可供分配,那么就调用交换机制,腾出一部分内存;另外在地址映像重要通过TLB(旁路转换缓冲,存放了一些页表文件)来寻找原创 2015-12-07 10:36:39 · 2564 阅读 · 0 评论 -
中断
中断控制是计算机发展中一个重要的技术。最初它是为了克服对I/O接口控制采用程序查询所带来的处理器效率低而产生的。中断控制的主要优点是只有在I/O需要服务时才能得到处理器的响应,而不需要处理器不断的进行查询。由此,最初的中断全部都是对外部设备而言的,称为外部中断(或硬件中断)。 但随着计算机系统结构的不断改进以及应用技术的日益提高,中断的适用范围也随之扩大,出现了所谓的内部中断(或叫异常)原创 2015-12-17 19:40:28 · 459 阅读 · 0 评论 -
物理内存分配与回收(3) 之slab分配机制
采用伙伴算法分配内存时,每次至少分配一个页面。但当请求分配的内存大小为几十字节或几百字节时又应如何处理?如何在一个页面中分配小的内存区?小内存区的分配所产生的内碎片又如何解决? 内存管理的开发者采用了一种叫做Slab的分配模式,Slab分配器是基于对象进行管理,相同类型的对象归为一类(如进程描述符就是一类)。当要申请这样一个对象时,Slab分配器就从Slab列表中分配一个这样大小的的原创 2015-12-14 13:56:03 · 1305 阅读 · 0 评论 -
段机制
由虚拟地址转换为一个物理地址其实是先通过段机制将虚拟地址(逻辑地址)转换为线性地址。然后通过分页机制将线性地址转换为物理地址。如图: 今天先写写段机制段是虚拟地址空间的基本单位,段机制必须把虚拟地址空间的一个地址转换为线性地址空间的一个线性地址。1.段描述符 段描述符是一个数据结构其包括 段的基地址(Bas原创 2015-12-06 17:16:15 · 462 阅读 · 0 评论 -
分页机制
分页机制在段机制之后进行,已完成线性地址——物理地址段转换。段机制把虚拟地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。 1线性地知道物理地址的转换第一步,用32位线性地址的最高10位第31~22位作为页目录项的索引,将它乘以4,与CR3中页目录项在内存的地址,获得相应目录项在内存的地址。(索引代表的是第几个,乘以4得到距离起始地址的地址偏移量)第二步,从这原创 2015-12-06 18:02:10 · 349 阅读 · 0 评论 -
Glibc 内存管理知识点总结
这几天在看Glibc 内存管理模块的内容,感觉收获颇多,在此做个简单的总结,以便知识点回顾。先介绍一下相关的背景。有个项目组在研发一个类似数据库的NoSql 系统时,遇到了Glibc 内存暴增问题。据此,在经过一系列排查过后,他们提出了几个问题,分别是:1.Glibc 在什么情况下不会将内存归还给操作系统系统?2.Glibc 的内存管理方式有哪些约束?适合什么样的内转载 2016-05-15 22:24:34 · 552 阅读 · 0 评论 -
系统调用基本概念
系统调用时值就是函数调用,值时调用的函数是系统函数,处于内核态而已。用户在调用系统调用时会向内核传递一个系统调用号,然后系统调用处理程序通过此号从系统调用表中找到相应的内核函数执行(系统调用服务例程),最后返回。1.系统调用号linux系统有几百个系统调用号,为了唯一的表识每一个系统调用,linux为每一个系统调用定义了一个唯一的编号,此编号就是系统调用号。系统调用号的定义在 /usr/i原创 2016-01-18 16:17:37 · 3955 阅读 · 1 评论 -
系统调用(1)
操作系统为用户运行的进程与硬件设备进行交互提供了一组接口。在应用程序和硬件之间设置这样一个接口具有很多优点,首先这使得编程更加容易,把用户从学习硬件设备的第即编程特性中解放出来。其次极大的提高了系统的安全性,内核在要满足某个请求之前就可以在接口级检查这种请求的正确性。最后,更重要的是,这些接口使得程序更具有可移植性,因为只要不同的操作系统所提供的这一组接口相同,那么在这些操作系统之上就可以正确的编原创 2016-01-18 14:32:06 · 310 阅读 · 0 评论 -
物理内存分配与回收(5)之交换机制
当物理内存出现不足时,Linux内存管理子系统需要释放部分物理页面内存。这一人任务由内核的交换守护进程kswapd完成,该内核守护进程实际是一个内核线程,它在内核初始化时启动,并周期的运行。就是为了保证系统中具有足够的空闲页面,从而使内存管理子系统能够正常运行法。一.交换的基本原理 在计算机技术的发展史上很早就有了把内存的内容与一个专用的磁盘空间交换技术,在Linux中,把用作交原创 2015-12-15 21:58:42 · 1540 阅读 · 0 评论 -
物理内存分配与回收(4)kmalloc 和 vmalloc
1.通用缓冲区 在内核中初始化开销不大的数据结构可以合用一个通用的缓冲区。通用缓冲区最小为32B,然后依次为64B,128B,。。。直至128KB(即32个页面),但是,对通用缓冲区的管理采用的是Slab方式。从通用缓冲区中分配和释放缓冲区的函数: void *kmalloc (size_t size, int flags); void kfree(cons原创 2015-12-14 15:29:44 · 864 阅读 · 0 评论 -
物理内存分配与回收(2)
物理页面的分配和回收原创 2015-12-13 17:03:11 · 558 阅读 · 0 评论 -
物理内存分配与回收(1)
在Linux中,CPU访问的地址是虚拟地址空间的虚地址。因此,对于内存的管理,通常是先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并和建立映射,也就是说虚存区间先分配,物理页面后分配。原创 2015-12-13 13:57:04 · 693 阅读 · 0 评论 -
linux用户态和内核态理解
当一个任务(进程)执行系统调用而执行内核代码时,称进程处于内核内核态,此时处理器处于特权级最高的(0级)内核代码中执行,当进程处于内核态时,执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈。当进程执行用户代码时,称其处于用户态,此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态,因为中断处理程序转载 2015-12-09 20:03:27 · 375 阅读 · 0 评论 -
请页机制
程序运行时,CPU访问的用户空间的虚地址,Linux采用请页机制来节约物理内存(物理内存对于磁盘来说是相当小的),也就是说它仅仅把当前所要使用的用户空间的少量页装入物理内存。若虚地址有效,但其对应的页并不在当前的物理内存,就是缺页异常,这时就要从磁盘中或者交换文件中将其装入物理内存。但是如果是要访问在用户空间(3GB)之外的地址,则该地址无效,并且会被终止运行。1.却页异常处理程序原创 2015-12-07 15:19:47 · 1051 阅读 · 0 评论 -
虚拟内存,内核空间和用户空间
linux简化了分段机制,使得虚拟地址与线性地址总是一致的。线性空间在32为平台上为4GB的固定大小,也就是Linux的虚拟地址空间也这么大,Linux内核将这4GB的空间分为两个部分。最高的1GB(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间“。而较低的3GB(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间”,因为每个进原创 2015-12-06 19:28:46 · 4954 阅读 · 1 评论 -
32位保护模式学习小结(4)---分页机制概述
简单的分页模型分页的内存管理模式是我们再熟悉不过的了,因为这是我们一贯的工作方式.在处理器中有负责分段管理的段部件.每个程序或任务都有自己的段,这些段都用段描述符定义.随着程序的执行,当要访问内存时,就用段地址上偏移量,段部件就会输出一个线性地址.在单纯的分段模式下,线性地址就是物理地址.然而一旦决定采用页式内存管理,就应当把4GB内存分为大小相同的页.但是,页在物理内存中位置是有讲究的,并不是在内原创 2016-08-31 19:00:52 · 1249 阅读 · 1 评论