返回列表 发帖

[徒弟原创] 【Linux内核培训】[xiakezhao]第一次课后作业[修改格式]

[徒弟原创] 【Linux内核培训】[xiakezhao]第一次课后作业[修改格式]

题1:说出linux的进程内核堆栈是如何通过SP堆栈指针来找到当前进程的描述符的,并给出这段代码?
     答:内核态的进程堆栈,和线程描述符thread_info结构体放在单独为进程分配的存储区域内,即thead_union共用体中,
           可以通过sp堆栈指针获得thead_info在内存中的起始地址,thead_info结构体中的struct task_struct *task中有

   有我们所要的当前进程的描述符,以及进程状态,进程调度信息等。
     
  1.          static inline struct thread_info *current_thread_info(void)          {                register unsigned long sp asm("sp");                return (struct thread_info *)(sp & ~(THREAD_SIZE -1)); //获的head_info结构体         }                   static inline struct  task_struct *get_current(void)         {                return current_thread_info()->task;           //获的task 结构体         }
复制代码

题2: 进程两种最重要的状态是什么?
    答: 最重要的是运行和停止,其他还有暂停,僵尸等状态。
题3: 给出进程的任务队列中第一个队列元素的数据结构表示?
    答: init_task
题4: linux的调度程序是从进程的哪个队列中获取最可能执行的进程?
    答: 运行队列,调度算法通过某种调度策略来实现对可运行队列的增减任务。
题5:  Linux进程的等待队列头元素结构体表示?
    答:
  1.          struct _wait_queue_head {                spinlock_t lock;                struct list_head task_list;          };          typedef struct _wait_queue_head wait_queue_head_t;
复制代码

题6:  列出几个已经在linux内核代码中实现了的“内核线程”?   
    答: 进程0, 线程1
题7:  说出进程0,线程1,进程1创建方法和运行方式?
    答:   进程0:是所有进程的祖先,它是linux的初始化阶段从无到有创建的一个内核线程。
         
           struct task_struct init_task = INIT_TASK(init_task);

              线程1:Start_Kernel函数初始内核需要的所有数据结构,激活中断,而产生的一个内核线程1。
              进程1:是线程1 在进行内核初始化后调用run_init_process("/sbin/init"),该函数通过execve()

                  系统调用装热可执行程序init,从而内核线程1编程了一个普通的进程1。

题8:  举一个例子说明内核抢占的过程。   
    答: 内核无论是在从中断处理程序还是在系统调用后返回,都会检查need resched标志。如果need resched标志被设置,会导致                                                  schedule()被调用,此时就会发生用户抢占。
题9:  内核中哪些情况是禁止内核抢占的?

    答: 1.内核正进行中断处理。
          2.内核正在进行中断上下文的Bottom Half(中断的底半部)处理。

  3.内核的代码段正持有spinlock自旋锁、writelock/readlock读写锁等锁,处干这些锁的保护状态中。


  4.内核正在对每个CPU“私有”的数据结构操作(Per-CPU date structures)。

题10: 进程调度的步骤。
    答: 1.选择下一个要运行的进程。


  2.进程上下文切换。

题11: 什么是进程上下文,什么是中断上下文?
   答: 进程上下文: 每个进程执行过的、执行时的以及代执行的指令和数据;在指令寄存器、堆栈、状态字寄存器等中的内容。
         中断上下文: 中断时,内核不代表任何进程运行,一般不访问当前进程的数据结构,此时的上下文称中断上下文。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

还是乱,不知哪里设置错了

TOP

(2)错,是运行态和挂起态,挂起台又分为可中断,和不可中断态。
其他的答案或者理解都还可以。

osboy评语:从答题效果来看还是比较好的,希望还是能够自己理解,没有理解的题目还是要自己做拓展阅读。有不清楚的要及时提问。

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服