引用 javaguide 4
目录
什么是系统调⽤
进程线程的区别
进程同步方式
线程间的同步的⽅式
操作系统的内存管理机制
分⻚机制和分段机制有哪些共同点和区别呢
CPU 寻址了解吗?为什么需要虚拟地址空间?
通过虚拟地址访问内存有以下优势:
根据进程访问资源的特点,我们可以把进程在系统上的运⾏分为两个级别:
1. ⽤户态(user mode) : ⽤户态运⾏的进程或可以直接读取⽤户程序的数据。
2. 系统态(kernel mode):可以简单的理解系统态运⾏的进程或程序⼏乎可以访问计算机的任何资源,不受限制。
说了⽤户态和系统态之后,那么什么是系统调⽤呢?
我们运⾏的程序基本都是运⾏在⽤户态,如果我们调⽤操作系统提供的系统态级别的⼦功能,就需要系统调⽤。
也就是说在我们运⾏的⽤户程序中,凡是与系统态级别的资源有关的操作(如⽂件管理、进程控制、内存管理等)
线程是进程划分成的更⼩的运⾏单位,⼀个进程在其执⾏的过程中可以产⽣多个线程。线
程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极
7种 信号 信号量 管道 有名管道 套接字 共享内存 消息队列
线程同步是两个或多个共享关键资源的线程的并发执⾏。应该同步线程以避免关键的资
源使⽤冲突。操作系统⼀般有下⾯三种线程同步的⽅式:
1. 互斥量(Mutex):采⽤互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。
因为互斥对象只有⼀个,所以可以保证公共资源不会被多个线程同时访问。⽐如 Java 中的
synchronized 关键词和各种 Lock 都是这种机制。
2. 信号量(Semphares) :它允许同⼀时刻多个线程访问同⼀资源,但是需要控制同⼀时刻访
问此资源的最⼤线程数量
3. 事件(Event) :Wait/Notify:通过通知操作的⽅式来保持多线程同步,还可以⽅便的实现多线程优先级的比较操作。
四种:
块 页 段 段页式
分的地址大小排序:块 > 页 > 段
简单分为连续分配管理⽅式和⾮连续分配管理⽅式这两种。连续分配管理⽅式是指为⼀个⽤户程
序分配⼀个连续的内存空间,常⻅的如 块式管理 。同样地,⾮连续分配管理⽅式允许⼀个程序
使⽤的内存分布在离散或者说不相邻的内存中,常⻅的如⻚式管理 和 段式管理。
⻚式管理 :把主存分为⼤⼩相等且固定的⼀⻚⼀⻚的形式,⻚⼩,相对相⽐于块式管理的划分⼒度更⼤,提⾼了内存利⽤率,减少了碎⽚。
在分⻚内存管理中,很重要的两点是:
1. 虚拟地址到物理地址的转换要快。 快表可以解决
2. 解决虚拟地址空间⼤,⻚表也会很⼤的问题。
1. 共同点 :
分⻚机制和分段机制都是为了提⾼内存利⽤率,减少内存碎⽚。
⻚和段都是离散存储的,所以两者都是离散分配内存的⽅式。但是,每个⻚和段中的内
存是连续的。
2. 区别
⻚的⼤⼩是固定的,由操作系统决定;⽽段的⼤⼩不固定,取决于我们当前运⾏的程序。
分⻚仅仅是为了满⾜操作系统内存管理的需求,⽽段是逻辑信息的单位,在程序中可以
总结来说:如果直接把物理地址暴露出来的话会带来严重问题,⽐如可能对操作系统造成伤害以
及给同时运⾏多个程序造成困难。
程序可以使⽤⼀系列相邻的虚拟地址来访问物理内存中不相邻的⼤内存缓冲区
虚拟内存是计算机系统内存管理的⼀种技术,我们可以⼿动设置⾃⼰电脑的虚拟内存。不要单纯
认为虚拟内存只是“使⽤硬盘空间来扩展内存“的技术。虚拟内存的重要意义是它定义了⼀个连续
的虚拟地址空间,并且 把内存扩展到硬盘空间。