Linux 0.11 内核笔记
<1> 任务0的堆栈问题
一直不明白schedule.c里的task_union的stack和user_stack是什么关系,head.s里就设置了esp指向user_stack, 却一直没有用到task_union,直到看到INIT_TASK才明白,从进入保护模式到跳转进用户态都是用的user_stack这个栈,而任务0的tss中的esp0指向task_union的stack, 也就是当任务0再跳转进内核态时才用task_union的栈。总结起来就是从进入保护模式到初始化完成,user_stack用作内核态栈,进入用户态后user_stack用做用户态栈,task_union的stack用做内核态栈。
<2> 内核态寻址问题
内核代码段和数据段基址为0, 段限长为16M,而且在head.s中所设置的前四个页表与物理内存页是一一对应的,所以在内核态可以直接寻址16M内存(0.11版只支持16M内存),也即线性地址和物理地址相等。
<3>物理地址分配
<4>线性地址分配
每个任务占64M的线性地址空间,任务0实际只用了0-64M的前640KB,因为段限长被设成了640KB。因为最多支持64个任务,所以总共使用了4G的线性地址空间。
相关文档:
总览
用iptables -ADC 来指定链的规
则
,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......
1.增加硬件
增加的ide硬盘前缀为hd,scsi硬盘前缀为sd;第一块硬盘为hda或sda,第二块硬盘为hdb或sdb,以此类推。
2.用pvcreate创建physical volumn
pvcreate /dev/sdb1 /dev/sdb2
此处所用的分区是第二步中操作的类型为8e的分区,pvcreate的参数可以为1个或多个;创建完成后可以用pvdisplay -v来查看创建的情况,用pvre ......
groups 查看当前登录用户的组内成员
groups gliethttp 查看gliethttp用户所在的组,以及组内成员
whoami 查看当前登录用户名
/etc/group文件包含所有组
/etc/shadow和/etc/passwd系统存在的所有用户名
添加用户abc到root群组:
gpasswd -a abc root ......
最近在看一个开源的代码,一段代码看了很久都没有看懂,Google了一下,尽然是linux中链表的遍历。
遍历链表:
遍历链表list_for_each是一个宏,展开了就是一个for循环
#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != ( ......
Linux信号量 共享内存和消息队列
1. 信号量
使用信号量可以实现进程间同步。主要函数定义:
#include <sys/sem.h>
int semctl(int sem_id, int sem_num, int command, …);
int semget(key_t key, int num_sems, int sem_flags);
int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
& ......