当前位置:  技术问答>linux和unix

进程复制函数中的任务状态段TSS的作用?

    来源: 互联网  发布时间:2016-10-15

    本文导语:  求高手帮忙,在下面的进程复制的程序中,TSS是怎么定义的结构体,它的作用是什么,为什么复制这些内容,多谢。 int copy_process(int nr,long ebp,long edi,long esi,long gs,long none,long ebx,long ecx,long edx,long fs,long es,long d...

求高手帮忙,在下面的进程复制的程序中,TSS是怎么定义的结构体,它的作用是什么,为什么复制这些内容,多谢。
int copy_process(int nr,long ebp,long edi,long esi,long gs,long none,long ebx,long ecx,long edx,long fs,long es,long ds,long eip,long cs,long eflags,long esp,long ss)
{
struct task_struct *p;
int i;
struct file *f;
p=(task_struct *)get_free_page();
if(!p)//如果申请失败的话
return -EAGAIN;
task[nr]=p;
*p=*current;//这个只会复制当前进程的内容
p->state=TASK_UNINTERRUPTIBLE;//先将进程设置为不可中断状态
p->pid=last_pid;//这个由下面一个函数会得到的。
p->father=current->pid;//设置父亲就什当前的进程
p->counter=p->priority;
p->signal=0;
p->leader=0;
p->alarm=0;
p->utime=p->stime=0;//初始化用户态和核心态的时间为0
p->cutime=p->cstime=0;//初始化子进程的用户态和核心态的时间
p->start_time=jiffies;//当前滴答数时间

// 以下设置任务状态段 TSS 所需的数据
p->tss.back_link = 0;
p->tss.esp0 = PAGE_SIZE + (long) p; // 堆栈指针(由于是给任务结构 p 分配了 1 页
// 新内存,所以此时 esp0 正好指向该页顶端)。
p->tss.ss0 = 0x10;
// 堆栈段选择符(内核数据段)[??]。
p->tss.eip = eip;
// 指令代码指针。
p->tss.eflags = eflags;
// 标志寄存器。
p->tss.eax = 0;
p->tss.ecx = ecx;
p->tss.edx = edx;
p->tss.ebx = ebx;
p->tss.esp = esp;
p->tss.ebp = ebp;
p->tss.esi = esi;
p->tss.edi = edi;
p->tss.es = es & 0xffff;
// 段寄存器仅 16 位有效。
p->tss.cs = cs & 0xffff;
p->tss.ss = ss & 0xffff;
p->tss.ds = ds & 0xffff;
p->tss.fs = fs & 0xffff;
p->tss.gs = gs & 0xffff;
p->tss.ldt = _LDT(nr); // 该新任务 nr 的局部描述符表选择符(LDT 的描述符在 GDT 中)。
p->tss.trace_bitmap = 0x80000000; (高 16 位有效)。

if(last_task_used_math==current)//如果当前任务使用了协处理器,就保存其上下文。
__asm__("clts ; fnsave %0"::"m" (p->tss.i387));

if(copy_mem(nr,p))
{
task[nr]=NULL;//如果复制失败的话
free_page((long)p);
return -EAGAIN;
}

//如果父进程有文件打开的,则将对应的文件次数加1
for(i=0;if_count++;
}
//将当前进程(父进程)的 pwd, root 和 executable 引用次数均增 1。
if (current->pwd)
current->pwd->i_count++;
if (current->root)
current->root->i_count++;
if (current->executable)
current->executable->i_count++;
//设置新任务的 TSS 和 LDT 描述符项(在 GDT 中),数据从 task 结构中取。在任务切换时,任务寄存器 tr 由 CPU 自动加载。局部描述符表寄存器 ldtr 已在 task0 时加载。
set_tss_desc(gdt+(nr

    
 
 

您可能感兴趣的文章:

  • 知道进程的ID,有什么函数知道这个进程还活不活?
  • linux下system函数调用shell命令后,怎样让主进程不等子进程返回,接着执行(在线)?
  • 请问已知进程的PID,通过什么函数可以得到进程的名字?
  • 进程间的函数调用算是进程间通信的一种方式吗
  • Linux,aix,windows下可以查询非本进程的信号处理函数吗?
  • 如何用函数判断某个守护进程处入运行中
  • 关于进程调度中的goodness()函数
  • 有检查进程是否存在的函数吗?
  • linux/unix里的进程互斥问题 ,有关lockf()函数!
  • 请问:进程创建的线程是怎样运行的啊,线程的处理函数运行完了,线程就退出了吗?
  • 父进程与子进程交替打印字母//怎么用pause()函数代替while(1)?
  • 有没有这样的函数?(杀死进程)
  • 请问:signal(), sigaction()函数会不会使自已所有的进程挂起啊,(这样就等接收各种信号,进行一些处理工作啊)
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • 请问,在linux下面,用什么样的函数才能将进程信息读出来??急急
  • 请教进程优先的函数
  • 如何查询SEMOP函数,最后一次操作成功的进程
  • 内核进程间发送信号用哪个函数,如果没有这东西,那内核里异步通知用哪个东西
  • 大虾们帮个忙吧。linux下可否有类似WaitForSingleObject的等待进程执行完毕的函数呢?
  • 关于goodness函数及进程优先级
  • 主进程有两个线程,fork子进程后复制主进程两个线程的内存么?
  • 进程复制数据到系统的内核地址出错,这时会出现什么问题?
  • fork()复制进程的问题2
  • fork复制进程问题
  • fork()复制进程的问题。
  • fork()后文件描述符复制给子进程吗?
  • 奇怪问题,在linux下跑压力时候,某个进程为啥会自动复制自己
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux僵尸(zombie)进程介绍及清除
  • 进程Afork进程B,进程Bfor进程C,如果进程C退出发出SIGCHLD,A进程是否可以收到
  • Ubuntu查看内存,进程相关命令介绍
  • 如果一个server进程要fork许多子进程,但不等待子进程终止,也不希望子进程结束后处于僵进程状态直到父进程终止。请问可采用什么方法实现
  • linux下进程占用内存空间详解
  • 如何查询SEMOP函数,最后一次操作成功的进程 iis7站长之家
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • fock()开出的子进程的进程ID是否进程ID都大于父进程的?
  • android 4.0 托管进程介绍及优先级和回收机制
  • 父进程等待子进程n秒,如果子进程正常退出,父进程立即继续向下执行,如果子出现进程故障一直不退出,父进程等待n秒后继续向下执行,请问
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 多进程问题 子进程读取内容 读完挂起,父进程写 写入后唤醒子进程
  • 一个进程首先监听一个端口,等到有连接了就新开一个进程,让新进程来处理后面的通讯。请问母进程中已经打开了端口,子进程怎么来使用同一
  • 我在一个父进程中,生成了4个子进程,子进程的优先级是一样的。我现在想结束子进程。该如何做?
  • 子进程wait/waitpid//子进程不结束,父进程会等待子进程吗?
  • 在一个进程中我定义了几个全局变量,然后我又fork了几个子进程,子进程中是否可以各自对全局变量进行修改,如果各子进程都对其进行修改,
  • 怎样一次杀掉父进程创建的所有子进程?我在父进程中用kill(0,SIGKILL),结果父进程也给干掉了,参数0难道不是表示除自己外的所有同uid的进
  • 进程创建进程组后,然后创建该组中的进程,然后终止。这里的终止....?
  • 如何实现子进程根据父进程的信号来确定是否终止子进程???
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • 如何通过进程号获得进程的一些信息,例如:进程运行的目录


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3