23.操作系统用高级语言提高了移植性,汇编编译器优化弥补了高级语言速度慢的缺点,另外通过性能检测程序可以发掘性能瓶颈,采用汇编进行优化。操作系统的性能瓶颈主要是:CPU调度和内存管理器
24.操作系统一般都带有性能监控程序,把执行过程的重要参数记录并写入日志文件,之后分析发现性能瓶颈和错误。
25.操作系统分层少,导致系统功能管理能力低,很容易出错。
26.分层太多,导致系统性能下降,并且层次设计复杂。
27.微内核特点表现为:移植性好,精简容易修改和扩展,客户端和服务端的交互式通过微内核进行交互的。缺点,性能低下。优化手段:把部分层次从用户空间移动到内核空间使微内核具备更多功能紧凑的功能,从而变成单一内核功能。
28.进程不止是运行的程序,而是一个系统分配资源的单位。
29.一、cpu调度采用MRU最近经常使用,二、中级调度采用LRU最近不经常使用,三、作业调度则是按照IO为主和CPU为主两类作业调度,使得资源合理分配。
30.用户线程需要内核线程来提供运行支持,因此CPU的调度单位是内核线程,一个内核线程占用一个CPU的时间片,如果多个线程对于一个内核线程,那么这些线程只能并发的在一个CPU上运行,而不能并行在多核CPU上,Solaris的GREEN THREAD库就是这样的系统。而Linux和Windows采用的是一对一的线程模型,即一个线程对于一个内核线程,这样一个进程的多个用户线程可以并行在多个CPU核心上。
31.而多对多的模型(多个用户线程对应多个内核线程)是两者的折中 ,是多路复用技术,即多个用户线程复用一组内核线程,多核CPU分用这一组内核线程。
32.其中多对一的线程模型又被称为用户级别的线程模型,而一对一和多对多则是内核级别的线程库。
33.linux2.6版本以前的线程库是多对一模型的线程库,所以CPU得不到很好的利用,而2.6版本开始有了NPTL(Native POSIX Thread Library),开始支持一对一的线程模型(内核级别的)。win32API的线程库则是一对一模型的,属于内核级别的。
JAVA的线程库依赖于JVM的宿主,例如jvm运行在linux,则使用NPTL,运行在Windows则采用WIN32API。
34.fork()从父进程的当前代码开始复制一个子进程,如果在子进程调用exec()执行指定其他程序,那么子进程会被指定程序覆盖。
而在线程中调用fork有2种:一、只复制当前线程到子进程中,二、复制整个进程中的所有线程到子进程中。
24.操作系统一般都带有性能监控程序,把执行过程的重要参数记录并写入日志文件,之后分析发现性能瓶颈和错误。
25.操作系统分层少,导致系统功能管理能力低,很容易出错。
26.分层太多,导致系统性能下降,并且层次设计复杂。
27.微内核特点表现为:移植性好,精简容易修改和扩展,客户端和服务端的交互式通过微内核进行交互的。缺点,性能低下。优化手段:把部分层次从用户空间移动到内核空间使微内核具备更多功能紧凑的功能,从而变成单一内核功能。
28.进程不止是运行的程序,而是一个系统分配资源的单位。
29.一、cpu调度采用MRU最近经常使用,二、中级调度采用LRU最近不经常使用,三、作业调度则是按照IO为主和CPU为主两类作业调度,使得资源合理分配。
30.用户线程需要内核线程来提供运行支持,因此CPU的调度单位是内核线程,一个内核线程占用一个CPU的时间片,如果多个线程对于一个内核线程,那么这些线程只能并发的在一个CPU上运行,而不能并行在多核CPU上,Solaris的GREEN THREAD库就是这样的系统。而Linux和Windows采用的是一对一的线程模型,即一个线程对于一个内核线程,这样一个进程的多个用户线程可以并行在多个CPU核心上。
31.而多对多的模型(多个用户线程对应多个内核线程)是两者的折中 ,是多路复用技术,即多个用户线程复用一组内核线程,多核CPU分用这一组内核线程。
32.其中多对一的线程模型又被称为用户级别的线程模型,而一对一和多对多则是内核级别的线程库。
33.linux2.6版本以前的线程库是多对一模型的线程库,所以CPU得不到很好的利用,而2.6版本开始有了NPTL(Native POSIX Thread Library),开始支持一对一的线程模型(内核级别的)。win32API的线程库则是一对一模型的,属于内核级别的。
JAVA的线程库依赖于JVM的宿主,例如jvm运行在linux,则使用NPTL,运行在Windows则采用WIN32API。
34.fork()从父进程的当前代码开始复制一个子进程,如果在子进程调用exec()执行指定其他程序,那么子进程会被指定程序覆盖。
而在线程中调用fork有2种:一、只复制当前线程到子进程中,二、复制整个进程中的所有线程到子进程中。