操作系统
区别
基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。
进程
状态
- 创建状态(new)
- 就绪状态(ready)
- 运行状态(running)
- 阻塞状态(waiting)
- 结束状态(terminated)
进程间的通信方式
- 管道/匿名管道(Pipes)
- 有名管道(Names Pipes)
- 信号(Signal)
- 消息队列(Message Queuing)
- 信号量(Semaphores)
- 共享内存(Shared memory)
- 套接字(Sockets)
调度算法
-
先到先服务(FCFS)调度算法
-
短作业优先(SJF)的调度算法
-
时间片轮转调度算法
-
多级反馈队列调度算法
- 既能使高优先级的作业得到响应又能使短作业(进程)迅速完成,目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法
-
优先级调度
线程
线程间的同步方式
-
互斥量(Mutex)
- 采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。
-
信号量(Semaphore)
- 它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
-
事件(Event) Wait/Notify
- 通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
死锁条件
- 互斥
- 占有并等待
- 非抢占
- 循环等待
内存管理
操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。
内存管理机制
-
连续分配管理方式
- 块式管理
-
非连续分配管理方式
-
页式管理
-
页式管理通过页表对应逻辑地址和物理地址。
- 快表
- 多级页表
-
-
段式管理
- 页式管理虽然提高了内存利用率,但是页式管理其中的页并无任何实际意义。 段式管理把主存分为一段段的,段是有实际意义的,每个段定义了一组逻辑信息
-
段页式
- 结合了段式管理和页式管理的优点
-
虚拟内存
虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬盘空间