- linux是类unix系统,但它不是unix系统。尽管linux实现了很多unix的API,但linux没有直接使用unix的源码。
- 遵守GPL v2的版权协议。
- 通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序负责管理进程地址空间的内存管理程序,和网络、进程通信等系统服务程序共同组成。
- 处理器必然处于三个活动之一:
1. 用户空间执行用户进程;
2. 内核空间,处于进程上下文,代表某个特定的进程执行;
3. 内核空间,处于中断上下文,与任何进程无关。
- linux是一个单内核,linux是模块化的,多线程的以及内核本身可调度的操作系统。linux与通用unix的区别:
1.动态加载内核模块;
2.支持对称多处理SMP机制;
3.内核可抢占;
4.线程实现很优雅;
5. 忽略了一些拙劣的unix特性。如stream。
6. 自由。
- 内核开发特点:
1.不能访问C库;
2.必须使用GNU C;
不遵守ANSI C标准。使用gcc编译器。涵盖了ISO C99标准和GNU C扩展特性。如内联函数,内联汇编,分支说明。
3.没有内存保护机制;
4.难以执行浮点预算;
5.每个进程只有定长的堆栈;
一般2个页。32位机上为8KB,64位机上为16KB。
6.由于支持中断、抢占、SMP,因此必须时刻注意同步和并发;
- 进程的五种状态:1. runing、2.interruptible、3.uninterruptible、4.traced、5.stopped
- 内核线程和普通进程的区别在于内核线程没有独立的地址空间,他从来不切换到用户空间去。它可以被调度,可以被抢占。
- 进程的阻塞和唤醒很好!(prepare_to_wait,wake_up)
- 系统调用,异常,陷入是访问内核的方法;
- 系统调用目前通过“软中断”通知内核;需要保证可重入的;
- 用户空间的应用编程接口API也是通过“系统调用”实现的
- linux尽力与POSIX和SUSv3兼容
- unix的接口设计有一句名言“提供机制而不是策略”
- ANSI规定char肯定是1字节
- int类型在linux下都是32位的
- short都是16位的
- 但long则不一定,可能32或64,甚至于统一体系结构的用户空间和内核空间的long长度都不一样,如sparc64
- 指针和long一样长
- int x=1; if (*(char *)&x == 1) /*little-endian*/ else /* big-endian */
-
【1】 在处理一个硬中断。
【2】 在处理一个软中断,如 softirq、tasklet 和 bh。
【3】 运行于内核态,但有进程上下文,即与一个进程相关。
【4】 运行一个用户态进程。
其中,【1】、【2】和【3】是运行于内核空间的,而【4】是在用户空间。其中除了【4】,其他状态只可以被在其之上的状态抢占。比如,软中断只可以被硬中断抢占