赞
踩
根据进程访问资源的特点,可以把进程在系统上的运⾏分为两个级别:
我们运⾏的程序基本都是运⾏在⽤户态,如果我们需要调⽤操作系统提供的系统态级别的⼦功能就需要系统调⽤了。也就是说在我们运⾏的⽤户程序中,凡是与系统态级别的资源有关的操作(如⽂件管理、进程控制、内存管理等),都必须通过系统调⽤⽅式向操作系统提出服务请求,并由操作系统代为完成。
这些系统调⽤按功能⼤致可分为如下⼏类:
设备管理:完成设备的请求或释放,以及设备启动等功能。
⽂件管理:完成⽂件的读、写、创建及删除等功能。
进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。
进程通信:完成进程之间的消息传递或信号传递等功能。
内存管理:完成内存的分配、回收以及获取作业占⽤内存区⼤⼩及地址等功能。
进程:
在操作系统中能够独立运行,并且作为资源分配的基本单位。它表示运行中的程序。系统运行一个程序就是一个进程从创建、运行到消亡的过程。
线程:
线程是进程划分成的更⼩的运⾏单位,⼀个进程在其执⾏的过程中可以产⽣多个线程。多个线程共享进程的堆和⽅法区资源,但是每个线程有⾃⼰的程序计数器、虚拟机栈 和 本地⽅法栈。系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,因此也被称为轻量级进程。
不同点:
线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。线程执⾏开销⼩,但不利于资源的管理和保护;⽽进程正相反。
我们⼀般把进程⼤致分为 5 种状态,这⼀点和线程很像。
创建状态(new) : 进程正在被创建,尚未到就绪状态。
就绪状态(ready) : 进程已处于准备运⾏状态,即进程获得了除了处理器之外的⼀切所需资源,⼀旦得到处理器资源(处理器分配的时间⽚)即可运⾏。
运⾏状态(running) : 进程正在处理器上上运⾏(单核 CPU 下任意时刻只有⼀个进程处于运⾏状态)。
阻塞状态(waiting) : ⼜称为等待状态,进程正在等待某⼀事件⽽暂停运⾏。即使处理器空闲,该进程也不能运⾏。处于阻塞状态的进程,在其等待的事件已经发生后,进程并不马上转入运行状态,而是先转入就绪状态,然后由系统调度在适当的时候将该进程转为运行状态;
结束状态(terminated) : 进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运⾏。
每个进程各自有不同的用户地址空间,进程之间要交换数据必须通过内核。在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。
进程间的通信⽅式可分为以下7种:
线程同步是两个或多个共享关键资源的线程的并发执⾏。应该同步线程以避免关键的资源使⽤冲突。操作系统⼀般有下⾯三种线程同步的⽅式:
为了确定⾸先执⾏哪个进程以及最后执⾏哪个进程以实现最⼤ CPU 利⽤率,定义了⼀些调度算法,它们是:
物理地址:
加载到内存地址寄存器中的地址,内存单元的真正地址。
逻辑地址:
CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。
例如,在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),和绝对物理地址无关。
操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),以及地址转换也就是将逻辑地址转换成相应的物理地址等功能。
操作系统的内存管理机制可简单的分为连续分配管理⽅式和⾮连续分配管理⽅式这两种。
连续分配管理⽅式是指为⼀个⽤户程序分配⼀个连续的内存空间,常⻅的如 块式管理 。同样地,⾮连续分配管理⽅式允许⼀个程序使⽤的内存分布在离散或者说不相邻的内存中,常⻅的如⻚式管理和段式管理以及段页式管理。
快表和多级⻚表是⻚式内存管理机制中的两个很重要的概念。
快表: 为了提高虚拟地址到物理地址的转换速度而提出的,操作系统在⻚表⽅案 基础之上引⼊了 快表 来加速虚拟地址到物理地址的转换。可以把块表理解为⼀种特殊的⾼速缓冲存储器(Cache),其中的内容是⻚表的⼀部分或者全部内容。作为⻚表的 Cache,它的作⽤与⻚表相似,但是提⾼了访问速率。
使⽤快表之后的地址转换流程是这样的:
多级⻚表: 引⼊多级⻚表的主要⽬的是为了避免把全部⻚表⼀直放在内存中占⽤过多空间,特别是那些根本就不需要的⻚表就不需要保留在内存中。多级⻚表属于时间换空间的典型场景。
例如采用页目录表+页表,页目录表的每一项对应一个页表,然后再根据页表找到对应的页。这种方式会带来时间的消耗,以上述两级页表为例,每一次访问的时候都要根据页目录表找到页表再找到具体的页。这种思想就类似与书本,如果要查找某一页的内容,首先在页目录表中找到这一页对应的页表,然后再查具体的某一页,这样其他页目录表的页表都不用存储,能节省大量内存;并且保证了页目录表和页表都是连续的,这就意味着可以使用偏移量的形式查找对应的页。
总结
为了提⾼内存的空间性能,提出了多级⻚表的概念;但是提高空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,提出了快表(即 TLB)的概念。 不论是快表还是多级⻚表实际上都利⽤到了程序的局部性原理。
共同点 :
区别 :
3. ⻚的⼤⼩是固定的,由操作系统决定;⽽段的⼤⼩不固定,取决于我们当前运⾏的程序。
4. 分⻚仅仅是为了满⾜操作系统内存管理的需求,⽽段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满⾜⽤户的需要。
现代处理器使⽤的是⼀种称为 虚拟寻址的寻址⽅式。使⽤虚拟寻址,CPU 需要将虚拟地址(逻辑地址)翻译成物理地址,这样才能访问到真实的物理内存。 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有的⼀个被称为 内存管理单元(MMU) 的硬件。
为什么要有虚拟地址空间呢?
当没有虚拟地址空间的时候,程序直接访问和操作的都是物理内存 。但是这样会出现一些问题:
即如果直接把物理地址暴露出来的话会带来严重问题,⽐如可能对操作系统造成伤害以及给同时运⾏多个程序造成困难。
而通过虚拟地址访问内存有以下优势:
内存: 内存又称主存,是CPU能直接寻址的存储空间,它的特点是存取速率快。内存是电脑中主要部件,是一个相对于外存的概念。内存一般采用半导体存储单元,包括随机存储器(RAM)、只读存储器(ROM)和高级缓存(Cache)。
RAM(Random Access Memory): 高速存取,支持读写数据,读写时间相等,且与地址无关,但是断电后其中的数据会丢失。
ROM(Read Only Memory): 断电后信息不丢失,如计算机启动用的BIOS芯片。存取速度很低,(较RAM而言)且不能改写。由于不能改写信息,不能升级,现已很少使用。
Cache: 介于CPU与内存之间,常用有一级缓存(L1)、二级缓存(L2)、三级缓存(L3)(一般存在于Intel系列)。它的读写速度比内存还快,当CPU在内存中读取或写入数据时,数据会被保存在高级缓冲存储器中,当下次访问该数据时,CPU直接读取高级缓冲存储器,而不是更慢的内存。
外存: 外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。外存需要通过I/O系统与之交换数据,又称为辅助存储器。常见的外储存器有硬盘、软盘、光盘、U盘等
很多时候我们使⽤点开了很多占内存的软件,这些软件占⽤的内存可能已经远远超出了我们电脑本身具有的物理内存。之所以可以实现上述功能,正是因为 虚拟内存 的存在,虚拟内存是计算机系统内存管理的⼀种技术,我们可以⼿动设置⾃⼰电脑的虚拟内存。
虚拟内存的重要意义是它定义了⼀个连续的虚拟地址空间,并且把内存扩展到硬盘空间。它使得应⽤程序认为它拥有连续的可⽤的内存(⼀个连续完整的地址空间),⽽实际上,它通常是被分隔成多个物理内存碎⽚,还有部分暂时存储在外部磁盘存储器上,在需要时进⾏数据交换。与没有使⽤虚拟内存技术的系统相⽐,使⽤这种技术的系统使得⼤型程序的编写变得更容易,对真正的物理内存(例如 RAM)的使⽤也更有效率。⽬前,⼤多数操作系统都使⽤了虚拟内存,如Windows 家族的“虚拟内存”;Linux 的“交换空间”等。
局部性原理是虚拟内存技术的基础,正是因为程序运⾏具有局部性原理,才可以只装⼊部分程序到内存就开始运⾏。
局部性原理表现在以下两个⽅⾯:
基于局部性原理,在程序装⼊时,可以将程序的⼀部分装⼊内存,⽽将其他部分留在外存,就可以启动程序执⾏。由于外存往往⽐内存⼤很多,所以我们运⾏的软件的内存⼤⼩实际上是可以⽐计算机系统实际的内存⼤⼩⼤的。在程序执⾏过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调⼊内存,然后继续执⾏程序。另⼀⽅⾯,操作系统将内存中暂时不使⽤的内容换到外存上,从⽽腾出空间存放将要调⼊内存的信息。这样,计算机好像为⽤户提供了⼀个⽐实际内存⼤的多的存储器——虚拟存储器。
虚拟内存的实现需要建⽴在离散分配的内存管理⽅式的基础上。其实现有以下三种⽅式:请求分⻚存储管理、请求分段存储管理、请求段⻚式存储管理。
下面以请求分⻚存储管理为例来进行说明:
请求分⻚是⽬前最常⽤的⼀种实现虚拟存储器的⽅法。请求分⻚存储管理建⽴在分⻚管理之上,为了⽀持虚拟存储器功能⽽增加了请求调⻚功能和⻚⾯置换功能。在请求分⻚存储管理系统中,作业开始运⾏之前,仅需要装⼊当前要执⾏的部分段即可运⾏。如果需执⾏的指令或访问的数据尚未在内存(称为缺⻚或缺段),则由处理器通知操作系统按照对应的⻚⾯置换算法将相应的⻚⾯调⼊到主存,同时操作系统也可以将暂时不⽤的⻚⾯置换到外存中。
请求分⻚与分⻚存储管理的区别
请求分⻚存储管理建⽴在分⻚管理之上。它们之间的根本区别在于是否将⼀作业的全部地址空间同时装⼊主存。请求分⻚存储管理不要求将作业全部地址空间同时装⼊主存,仅需要装⼊当前要执⾏的部分即可运⾏。基于这⼀点,请求分⻚存储管理可以提供虚拟内存,⽽分⻚存储管理却不能提供虚拟内存。
两者都需要逻辑地址到物理地址的变换。
⻚⾯置换算法是虚拟内存管理中的⼀个概念。
页面置换算法:
地址映射过程中,若在⻚⾯中发现所要访问的⻚⾯不在内存中,则发⽣缺⻚中断 。缺⻚中断 就是要访问的⻚不在主存,需要操作系统将其调⼊主存后再进⾏访问。当发⽣缺⻚中断时,如果当前内存中并没有空闲的⻚⾯,操作系统就必须在内存选择⼀个⻚⾯将其移出内存,以便为即将调⼊的⻚⾯让出空间。⽤来选择淘汰哪⼀⻚的规则叫做⻚⾯置换算法,我们可以把⻚⾯置换算法看成是淘汰⻚⾯的规则。
页面置换算法大概可以分为以下几类:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。