烟酒生DAY_ONE_linux内核学习-------task_struct的头文件分析
2016-04-22 19:04
459 查看
仅仅为了是个人学习记录,
烟酒生的linu内核记录生活第一天DAY1
希望能坚持毕业后
task_struct{
state//描述现在任务中的状态
stread_info//俗称线程状态
/*找了 本书,看了其结构为:
struct stread_info{
struct task_task *task;//又有一个指向该任务的指针,不过正常嘛,毕竟线程信息,肯定要指向任务的呗
strcut exec_domain *exec_exec_domain;//呵呵,貌似是执行的,暂时还不知道,我先看看内核
unsigned long flags;//标记,32位无符号唉,线程信息里肯定需要标记的吧,看这个具体内容吧,我暂时也不知道唉
_u32 cpu
_s32preempt_count
mm_segment_addr_limit;看他的字面意思吧,内存区段地址的限制,那估计就是不能用的内存地址块(某些地址不准 用,BIOS等吧)
u8 supervisor_stack[0];感觉是个堆栈吧
}
上面的是老版,让我们看看新版:
struct thread_info {
unsigned long
flags; /* low level flags */
int preempt_count;
/* 0 => preemptable, <0 => bug */
mm_segment_t
addr_limit; /* address limit */
struct task_struct
*task; /* main task structure */
__u32 cpu;
/* cpu */
__u32 cpu_domain;
/* cpu domain */
struct cpu_context_save
cpu_context;
/* cpu context */
__u32 syscall;
/* syscall number */
__u8 used_cp[16];
/ * thread used copro */
unsigned long
tp_value[2];
/* TLS registers */
#ifdef CONFIG_CRUNCH
struct crunch_state
crunchstate;
#endif
union fp_state
fpstate __attribute__((aligned(8)));
union vfp_state
vfpstate;
#ifdef CONFIG_ARM_THUMBEE
unsigned long
thumbee_state; /* ThumbEE Handler Base register */
#endif
忽然发现,相差不多,都有:
1.肯定要标记,要标记东西
2.肯定有一个指向主任务的指针,线程,得切换,所以必须得有,这个很重要唉
3.不能访问的内存地址,这个也重要,不能乱访问
4.要有一个指向执行的指针,这个也重要
好了,暂时也就了解这么多了
};
*/
usage//据说是使用法则
run_list;/* 这个是运行列表的意思嘛,list_head的类型很重要唉,双向指针,这个里面有优先级等级,例如我等级是NO.1,劳资要插入到第一种,所以双向链表可已插入要运行的地方*/
mm /*这个嘛 .MAMA,memory,momory ,记忆记忆,当然是内存空间了
real_parent//真正的父亲,当然是所有人的老大,INIT(),PID=1
parent//上一个进程,因为双向链表,必定指明他是谁生出来的,老外用词还是不错的
tty //占时还没看到,以后看到再补充
fs//fs_struct------>指向当前目录,唉
file//-------------------->指向文件的指针,这个也是,毕竟任务,你丫能不让他访问文件嘛,人家牛比着呢
signal//--------------------------》singnal_STRUCT
}
烟酒生的linu内核记录生活第一天DAY1
希望能坚持毕业后
task_struct{
state//描述现在任务中的状态
stread_info//俗称线程状态
/*找了 本书,看了其结构为:
struct stread_info{
struct task_task *task;//又有一个指向该任务的指针,不过正常嘛,毕竟线程信息,肯定要指向任务的呗
strcut exec_domain *exec_exec_domain;//呵呵,貌似是执行的,暂时还不知道,我先看看内核
unsigned long flags;//标记,32位无符号唉,线程信息里肯定需要标记的吧,看这个具体内容吧,我暂时也不知道唉
_u32 cpu
_s32preempt_count
mm_segment_addr_limit;看他的字面意思吧,内存区段地址的限制,那估计就是不能用的内存地址块(某些地址不准 用,BIOS等吧)
u8 supervisor_stack[0];感觉是个堆栈吧
}
上面的是老版,让我们看看新版:
struct thread_info {
unsigned long
flags; /* low level flags */
int preempt_count;
/* 0 => preemptable, <0 => bug */
mm_segment_t
addr_limit; /* address limit */
struct task_struct
*task; /* main task structure */
__u32 cpu;
/* cpu */
__u32 cpu_domain;
/* cpu domain */
struct cpu_context_save
cpu_context;
/* cpu context */
__u32 syscall;
/* syscall number */
__u8 used_cp[16];
/ * thread used copro */
unsigned long
tp_value[2];
/* TLS registers */
#ifdef CONFIG_CRUNCH
struct crunch_state
crunchstate;
#endif
union fp_state
fpstate __attribute__((aligned(8)));
union vfp_state
vfpstate;
#ifdef CONFIG_ARM_THUMBEE
unsigned long
thumbee_state; /* ThumbEE Handler Base register */
#endif
忽然发现,相差不多,都有:
1.肯定要标记,要标记东西
2.肯定有一个指向主任务的指针,线程,得切换,所以必须得有,这个很重要唉
3.不能访问的内存地址,这个也重要,不能乱访问
4.要有一个指向执行的指针,这个也重要
好了,暂时也就了解这么多了
};
*/
usage//据说是使用法则
run_list;/* 这个是运行列表的意思嘛,list_head的类型很重要唉,双向指针,这个里面有优先级等级,例如我等级是NO.1,劳资要插入到第一种,所以双向链表可已插入要运行的地方*/
mm /*这个嘛 .MAMA,memory,momory ,记忆记忆,当然是内存空间了
real_parent//真正的父亲,当然是所有人的老大,INIT(),PID=1
parent//上一个进程,因为双向链表,必定指明他是谁生出来的,老外用词还是不错的
tty //占时还没看到,以后看到再补充
fs//fs_struct------>指向当前目录,唉
file//-------------------->指向文件的指针,这个也是,毕竟任务,你丫能不让他访问文件嘛,人家牛比着呢
signal//--------------------------》singnal_STRUCT
}
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- 神器SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程