还在编写中.....
1、什么是操作系统(Operation System)?
›操作系统首先是软件程序
›计算机系统的核心和基石
›管理计算机硬件,为应用程序提供基础
2、操作系统与应用程序的关系?
1›操作系统提供运行环境和必要的服务
2›应用程序在操作系统提供的环境中运行并使用操作系统提供的服务
*>
单个程序通常不能最大化的发挥处理器,
程序并发运行,
多个程序分享处理器资源。
›并发带来的问题:
»
执行不连续
–
应用程序本身不知道自己的执行流程什么时候会被打断!
»互斥
–例子
–
临界资源
&
临界区
–应用程序不知道其他应用程序是否正在访
问临界资源
3、为什么选择Linux系统?
Linux是一个以开发者为中心的操作系统,Windows是以消费者为中心的操作系统。这是最根本的区别,也是Linux相对于Windows的优势/劣势所在。
Linux内核:»操作系统的核心部分,提供硬件抽象、文件系统控制、多任务支持等功能。
内核模块:1»对Linux内核的扩展;2»可动态的加载/卸载;3»可单独编译,但是必须作为内核的一部分运行。
内核空间:»存放内核运行时的代码和数据
–
问题:内核模块运行时的代码和数据在哪里?
›
用户空间:»存放应用程序运行时的代码和数据
1»每个进程有自己独立的用户空间;
2»进程之间不能互相访问对方的用户空间;
3»进程不能直接访问内核空间中的数据;
进程中为什么需要线程?
1›共享地址空间 – 编程更简单;
2›任务并行化 – 程序效率更;
内核线程与用户进程/线程:
›
栈空间不同,
1»内核线程的栈只位于内核空间中
2»用户进程/线程在用户空间和内核空间中都有对应的栈
»POSIX条件变量、互斥锁等属于POSIX可选实现部分,因此在Linux中通过man命令无法查看这些功能的API说明。可以通过以下方式解决:
apt-get install manpages-posix-dev
POSIX定时器
–
问题:进程如何与内核交换信息
?
–
问题:进程间如何交换信息?
用户态 VS 内核态
1›可访问的空间不同
»用户态->只能访问用户空间
»内核态->只能访问内核空间
2›可执行的操作(指令)不同
»用户态->不能进行硬件相关的指令
»内核态->可以执行所有指令
1) 系统调用:这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
2) 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
3) 外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
4、内核与用户空间通讯: