init函数和init进程的区别
由于执行init()函数的内核线程和init进程的进程标识符都是1,它们又都叫init,因此init()函数和init进程容易造成概念上的模糊不清。主要区别:1、init()函数是内核代码的一部分,在内核态运行,是独立的可执行代码的一部分。2、init进程在Linux操作系统中是一个具有特殊意义的进程,它是由内核启动并运行的第一个用户进程,因此它不是运行在内核态,而是运行在用户态。它的代码不是内核本身的一部分,而是存放在硬盘上可执行文件的映象中,和其他用户进程没有什么两样。0号进程--》1号内核线程--》1号内核进程--》init进程(1号用户进程)0号进程:这是系统引导时自动形成的一个进程,实际上就是内核本身。它是系统中后来产生的所有进程的祖先。当内核系统完成自身初始化工作后,由内核本身调用函数kernel_thread(),它使用int 0x80系统调用创建了第一个内核线程。1号内核线程:所谓内核线程,在Linux系统中是指没有虚拟存储空间的进程,内核线程可以直接使用物理地址空间,运行在内核态中。在软中断系统调用返回后,通过比较ESP和ESI寄存器的值来判断父、子进程。如果ESP寄存器的值就等于ESI寄存器的值,系统认为是父进程,就是内核本身,它就是0号进程。否则就是内核创建的第一个内核线程。所以此线程就是1号线程。1号内核进程:如果是1号内核线程,程序控制该子程序直接去执行init()函数,随后,1号线程将演变成1号内核进程。init进程:init()函数调用execve()从文件/etc/inittab中装入可执行程序init()并执行,从此执行init()函数的1 号内核进程演变成为init进程。也就是说由init()函数产生了init进程。在这个演变过程中没有使用fork(),因此,init进程的进程标识符仍然是1号内核进程的标识符1。
高斯函数是什么有啥作用
高斯函数的形式为 其中 a、b 与 c 为实数常数 ,且a 》 0. c^2 = 2 的高斯函数是傅立叶变换的特征函数。这就意味着高斯函数的傅立叶变换不仅仅是另一个高斯函数,而且是进行傅立叶变换的函数的标量倍。 高斯函数属于初等函数,但它没有初等不定积分。但是仍然可以在整个实数轴上计算它的广义积分
欧拉函数证明
E(x)表示比x小的且与x互质的正整数的个数。*若p是素数,E(p)=p-1。*E(p^k)=p^k-p^(k-1)=(p-1)*P^(k-1)证:令n=p^k,小于n的正整数数共有n-1即(p^k-1)个,其中与p不质的数共[p^(k-1)-1]个(分别为1*p,2*p,3*p...p(p^(k-1)-1))。所以E(p^k)=(p^k-1)-(p^(k-1)-1)=p^k-p^(k-1).得证。*若ab互质,则E(a*b)=E(a)*E(b),欧拉函数是积性函数.*对任意数n都可以唯一分解成n=p1^a1*p2^a2*p3^a3*...*pn^an(pi为素数).则E(n)=E(p1^a1)*E(p2^a2)*E(p3^a3)*...*E(pn^an) =(p1-1)*p1^(a1-1)*(p2-1)*p2^(a2-1)*...*(pn-1)*pn^(an-1) =(p1^a1*p2^a2*p3^a3*...*pn^an)*[(p1-1)*(p2-1)*(p3-1)*...*(pn-1)]/(p1*p2*p3*...*pn) =n*(1-1/p1)*(1-1/p2)*...*(1-1/pn)* E(p^k) =(p-1)*p^(k-1)=(p-1)*p^(k-2)*p E(p^(k-1))=(p-1)*p^(k-2)-》当k》1时,E(p^k)=E(p*p^(k-1))=E(p^(k-1))*p. (当k=1时,E(p)=p-1.)由上式: 设P是素数, 若p是x的约数,则E(x*p)=E(x)*p. 若p不是x的约数,则E(x*p)=E(x)*E(p)=E(x)*(p-1). *快速求欧拉函数方法: 首先来回顾一下线性筛选素数方法: