分享
 
 
 

Linux Process Management

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

>沒有中文,希望大家能接受!

>

>--

>Love need to learn.

>Love need to pay.

>wade, coventive, 886-2-8226-3600 ext 229

>

>

>

>

> ------------------------------------------------------------------------

>

> 1. P.15 Chapter 2 - Process Management

> 1. Process include :

> 1. text section: executing program code

> 2. data section: global variables, a set of resources

> such as open files, pending signals, an address space

> 3. one or more threads of execution

> 2. Each thread includes a unique program counter, process

> stack, and set of processor registers, but linux does not

> differentiate between threads and processes.

> 3. Processes provide two vitualizations:

> 1. virtualized proessor : sharing the processor among

> dozens of other processes

> 2. virtual memory : it lets the process allocate and

> manage memory as if it alone owned all the memory in

> the system.

> 4. When a process exits, it is placed into a special zombie

> state that is used to represent terminated processes until

> the parent calls wait() or waitpid()

> 5. The kernel representation of a running program as a task,

> and the user-space representation as a process.

> 2. P.16 The Process Descriptor and Task Structure

> 1. The kernel stores the processes in a circular doubly

> linked list called the task list.

> 2. The process descriptor contains the data that describe the

> executing program: running state, open files, the

> process's address space, pending signals, permission,

> semaphore, executing time...

> 3. The task_struct is allocated via the slab allocator to

> provide object reuse and cache coloring.

> 4. Prior to the 2.6 kernel series, the task_struct was stored

> at the end of the kernel stack of each process. This

> allowed architectures with few registers, such as x86, to

> calculate the location of the process descriptor via the

> stack pointer without using an extra register to store the

> location.

> 3. P.18 Storing the Process Descriptor

> 1. The system identifies processes by a unique PID. The

> default maximum value is 32767(up to 4294967296).

> 2. It is very useful to be able to quickly lookup the process

> descriptor of the currently executing task, which is done

> via the current macro. This macro must be separately

> implemented by each supported architecture.

> 4. P.19 Process states:

> 1. The state field of the process descriptor describes the

> current condition of the process. The value is represented

> by one of five flags:

> 1. TASK_RUNNING: it is either currently running or on a

> runqueue waiting to run (runqueue are discussed in

> Chap. 3).

> 2. TASK_INTERRUPTIBLE: it is sleeping, blocked, waiting

> for some condition to occur. When this condition

> occurs, the kernel sets the process's state to

> TASK_RUNNING. The processes also awakes prematurely

> and becomes runnable if it receives a signal.

> 3. TASK_UNINTERRUPTIBLE: it will not wake up and become

> runnable if it receives a signal. (see fork())

> 4. TASK_ZOMBIE: The task has terminated, but its parent

> has not yet issued a wait4() system call. The task's

> process descriptor must remain in case the parent

> wants to access it.

> 5. TASK_STOPPED: This occurs if the task receives the

> SIGSTOP, SIGTSTP, SIGTTIN, or SIGTTOU signal or if

> it receives any signal while it is being debugged.

>

> --- refer ---

>

> 1. running: on user space.

> 2. interrupt routine: a exception handler such as KBD,

> timer.

> 3. system call: such as read, write.

> 4. waiting: wait for an event.

> 5. return: kernel will check scheduler, signals.

> 6. ready: ready to run.

>

> interrupt (kernel) scheduler

> ----------.--------------------------------.--------------

> . .

> . .

> running ===+==> system call <==================> waiting

> ^ . | | . ^

> | . | | . |

> | . |=====|=> interrupt routing <==========+

> | . | | .

> | . | | .

> | . v v .

> +-----.----- return <=======================> ready

> . .

> . .

>

>

> 5. P.20 Manipulating the Current Process State

> 1. Using the set_task_state(task, state) function to set the

> given task to the given state.

> 6. P.20 Process Context

> 1. One of the most important parts of a process is the

> executing program code.

> 2. When a program executes a system call or triggers an

> exception, it enters kernel-space. At this point, the

> kernel is said to "be executing on behalf of the process"

> and is in process context.

> 3. When in process context, the current macro is valid.

> 4. All processes are descendents of the init process whose

> PID is 1.

> 5. Every process on the system has exactly one parent.

> Likewise, every process can have one or more children. The

> relationship between processes is stored in the process

> descriptor.

>

># pstree

> init-+-apache--5*[apache]

> |-apmd

> |-atd

> |-bash-+-bash--Xprt

> | |-logger

> | `-tee

> |-bdflush

> |-brltty

> |-cron

> |-5*[getty]

> |-inetd

> |-kapmd

> |-keventd

> |-khubd

> |-kjournald

> |-klogd

> |-kreiserfsd

> |-ksoftirqd_CPU0

> |-kswapd

> |-kupdated

> `-syslogd

>

>

> 7. P.22 Process Creation

> 1. fork() : creates a child process that is a copy of the

> current task. It differs from the parent only in its PID,

> its PPID, and certain resources and statistics, such as

> pending signals, which are not inherited.

> 2. exec() : loads a new executable into the address space and

> begins executing it.

> 3. With Linux, fork() is implemented using copy-on-write

> pages. Instead of duplicating the process address space,

> the parent and the child can share a single copy. The data

> is marked in such a way that if it is written to, a

> duplicate is made and each process receives a unique copy.

> 4. If exec() is called immediately after fork() - they never

> need to be copied. The only overhead incurred by fork() is

> the duplication of the parent's page tables and the

> creation of a unique process descriptor for the child.

> 8. P.23 fork()

> 1. fork() <-- clone() <-- do_fork() <-- copy_process()

> 1. Calls dup_task_struct() which creates a new kernel

> stack, thread_info structure, and task_struct for

> the new process whose values are identical to those

> of the current task.

> 2. Check that the new child will not exceed the

> resource limits on the number of processes for the

> current user.

> 3. Now the child needs to differentiate itself from its

> parent. Various members of the process descriptor

> are cleared or set to initail values.

> 4. Next, the child's state is set to

> TASK_UNINTERRUPTIBLE, to insure it does not yet run.

> 5. Calls copy_flags() to update the flags member of the

> task_struct. The PF_SUPERPRIV flag, which denotes

> whether a task used super-user priv, is cleared. The

> PF_FORKNOEXEC flag, which denotes a process that has

> not called exec(), is set.

> 6. Calls get_pid() to assign an available PID to the

> new task.

> 7. Depending on the flags passed to clone(), either

> copy or share open files, filesystem information,

> signal handlers, process address space, and namespace.

> 8. Share the remaining timeslice between the parent and

> its child.

> 9. Cleanup and return a pointer to the new child.

> 2. ==> The kernel runs the child process first. (avoid

> copy-on-write overhead)

> 9. P.24 vfork()

> 1. The vfork() has the same effect as fork(), except that the

> page table entries of the parent process are not copied.

> Instead, the child executes as the sole thread in the

> parent's address space, and the parent is blocked until

> the child either calls exec() or exits.

> 2. The child is not allowed to write to the address space.

> 3. ==> use fork() is ok in kernel > 2.2.

> 10. P.25 The Linux Implementation of Threads

> 1. The Linux kernel done not provide any special scheduling

> semantics or data structures to represent threads.

> Instead, a thread is merely a process which share certain

> resources. Each thread has a unique task_struct and

> appears to the kernel as a normal process which shares the

> address space, filesystem resources, file descriptors, and

> installed signal handlers.

> 2. Threads are created like normal task with the exception

> that the clone() system call is passed flags corresponding

> to specific resources to be shared:

> clone (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, 0);

> fork() can be implemented by clone() as:

> clone (SIGCHLD, 0);

> vfork() as:

> clone (CLONE_VFORK | CLONE_VM | SIGCHLD, 0);

>

>- clone() Flags:

>

> Flag Meaning

> ============== ======================================================

> CLONE_CLEARTID clear the TID

> CLONE_DETACHED the parent does not want a SIGCHLD signal send on exit

> CLONE_FILES parent and child share open files

> CLONE_FS parent and child share filesystem information

> CLONE_IDLETASK set PID to zero (only used by the idle tasks)

> CLONE_NEWNS create a new namespace for the child

> CLONE_PARENT child is to have same parent as its parent

> CLONE_PTRACE continue tracing child

> CLONE_SETTID write the PID back to user-space

> CLONE_SETTLS create a new TLS for the child

> CLONE_SIGHAND parent and child share signal handlers

> CLONE_SYSVSEM parent and child share System V SEM_UNDO semantics

> CLONE_THREAD parent and child aew in the same thread group

> CLONE_VFORK vfork() was used and the parent will sleep until the

> child wakes it

> CLONE_VM parent and child share address space

> ============== ======================================================

>

>

> 11. P.26 Kernel Threads

> 1. Kernel Threads is often useful for the kernel to perform

> some operations in the background -- standard processes

> that exist solely in kernel space.

> 2. The significant difference between kernel threads and

> normal processes is that kernel threads do not have an

> address space and do not context switch into user-space.

> Kernel threads are schedulable and preemptable as normal

> processes.

> 3.

>

> # ps axw

> PID TTY STAT TIME COMMAND

> 1 ? S 0:05 init [5]

> 2 ? SW 0:00 [keventd]

> 0 ? SWN 0:00 [ksoftirqd_CPU0]

> 0 ? SW 0:11 [kswapd]

> 0 ? SW 0:00 [bdflush]

> 0 ? SW 0:00 [kupdated]

> 7 ? SW 0:00 [khubd]

> 8 ? SW 1:45 [kjournald]

> 60 ? SW 0:00 [kapmd]

>

>

> 4. Indeed, a kernel thread can only be created by another

> kernel thread. The interface for spawning a new kernel

> thread from an existing one is: int kernel_thread (int

> (*fn)(void *), void * arg, unsigned long flags) flags:

> most kernel threads pass CLONE_FS | CLONE_FILES |

> CLONE_SIGHAND

> 12. P.27 Process Termination

> 1. Typically, processes destruction occurs when the process

> calls the exit() system call: exit() or return from main().

> 2. A process can also terminate when it receives a signal or

> exception it cannot handle or ignore.

> 3. do_exit() in kernel complete a number of chores(in

> kernel/exit.c):

> 1. Set the PF_EXITING flag in the flags member of the

> task_struct.

> 2. If BSD process accounting is enabled, call

> acct_process() to write out accounting information.

> 3. Call __exit__mm() to release the mm_struct held by

> this process.

> 4. Call sem_exit(). Dequeue its IPC semaphor if it

> queued waiting for.

> 5. Call __exit_files(), __exit_fs(), exit_namespace(),

> and exit_sighand() to decrement the usage count of

> objects related to file descriptors, filesystem

> data, the process namespace, and signal handlers,

> respectively.

> 6. Set the task's exit code, stored in the exit_code

> member of the task_struct, to the code provided by

> exit() or whatever kernel mechanism forced the

> termination.

> 7. Call exit_notify() to send signals to the task's

> parent, reparent any of the task's children to

> another thread in their thread group or the init

> process, and set the task's state to TASK_ZOMBIE.

> 8. Finally, call schedule() to switch to a new process,

> this is the last code the task will ever execute.

> 9. ==> The only memory it occupies is its kernel stack

> and slab object, which contain its thread_info and

> task_struct structures. The task exists solely to

> provide information to its parent.

> 13. P.28 Removal of the Process Descriptor

> 1. The acts of cleaning up after a process and removing its

> process descriptor are separate.

> 2. When it is time to finally deallocate the process

> descriptor, release_task() is invoked. It does the following:

> 1. Call free_uid() to decrement the usage count of the

> process's user.

> 2. Call unhash_process() to remove the process from the

> pidhash and remove the process from the task list.

> 3. If the task was ptraced, reparent it to its original

> parent and remove it from the ptrace list.

> 4. Call put_task_struct() to free the pages containing

> the process's kernel stack and thread_info structure

> and deallocate the slab cache containing the

> task_struct.

> 14. P.28 The Dilemma of the Parentless Task

> 1. http://www.qnx.com/developers/docs/qnx_4.25_docs/qnx4/sysarch/proc.html

>

> 2. The solution, hinted upon previously, is to reparent a

> task's children on exit to either another process in the

> current thread group or, if that fails, the init process.

>

> 1. Commands for Process

> Command Description

> ps report a snapshot of the current processes.

> top display Linux tasks

> nice run a program with modified scheduling priority

> renice alter priority of running processes

> kill

> send a signal to a process Name Num Action Description

> 0 0 n/a exit code indicates if a signal may be sent

> ALRM 14 exit

> HUP 1 exit

> INT 2 exit

> KILL 9 exit this signal may not be blocked

> PIPE 13 exit

> POLL exit

> PROF exit

> TERM 15 exit

> USR1 exit

> USR2 exit

> VTALRM exit

> STKFLT exit may not be implemented

> PWR ignore may exit on some systems

> WINCH ignore

> CHLD ignore

> URG ignore

>

> killall kill processes by name

> skill, snice send a signal or report process status

> pstree display a tree of processes

> pgrep, pkill look up or signal processes based on name and

> other attributes

> free Display amount of free and used memory in the system

> uptime Tell how long the system has been running.

> w Show who is logged on and what they are doing.

> pidof find the process ID of a running program.

> fuser identify processes using files or sockets

> sleep, usleep delay for a specified amount of time

> time counting running time of a command

> jobs show stopped processes list

> history command history

> nohup run a command immune to hangups, with output to a non-tty

> at, batch, atq, atrm queue, examine or delete jobs for later

> execution

> crontab maintain crontab files for individual users

> bg, fg let stopped process run on background, foreground

> procinfo display system status gathered from /proc

> reboot, halt, shutdown, poweroff stop the system

>

> 2. /proc

> 1. apm: advanced power manager

> 1.16 1.2 0x03 0x01 0xff 0x80 -1% -1 ?

> 2. bus: such pci, usb bus.

> 3. cmdline: boot parameter for kernel

> root=/dev/hda4 vga=785 rootfstype=ext3

> 4. cpuinfo

> attribute value

> processor 0

> vendor_id GenuineIntel

> cpu family 6

> model 7

> model name Pentium III (Katmai)

> stepping 3

> cpu MHz 451.028

> cache size 512 KB

> fdiv_bug no

> hlt_bug no

> f00f_bug no

> coma_bug no

> fpu yes

> fpu_exception yes

> cpuid level 2

> wp yes

> flags fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca

> cmov pat pse36 mmx fxsr sse

> bogomips 897.84

>

> 5. devices

> * Character devices:

> Major Number Device Name

> 1 mem

> 2 pty

> 3 ttyp

> 4 ttyS

> 5 cua

> 7 vcs

> 10 misc

> 14 sound

> 29 fb

> 81 video_capture

> 108 ppp

> 128 ptm

> 136 pts

> 162 raw

> 180 usb

>

> * Block devices:

> Major Number Device Name

> 2 fd

> 3 ide0

> 7 loop

> 114 ataraid

>

> 6. dma

> 7. driver

> 8. execdomains

> 9. fb

> 10. filesystems

> /dev node? filesystem

> nodev rootfs

> nodev bdev

> nodev proc

> nodev sockfs

> nodev tmpfs

> nodev shm

> nodev pipefs

> ext3

> ext2

> nodev ramfs

> iso9660

> nodev devpts

> nodev usbdevfs

> nodev usbfs

> nodev autofs

> nodev nfs

> vfat

> reiserfs

>

> 11. fs

> 12. ide

> 13. interrupts

> IRQ Number in CPU0 ??? Name

> 0 20684227 XT-PIC timer

> 1 74567 XT-PIC keyboard

> 2 0 XT-PIC cascade

> 4 153184 XT-PIC serial

> 8 4 XT-PIC rtc

> 10 0 XT-PIC usb-uhci, ESS Solo1

> 11 4078280 XT-PIC eth0

> 12 301378 XT-PIC PS/2 Mouse

> 14 1182857 XT-PIC ide0

> NMI 0

> ERR 0

>

> 14. iomem

> Address Description

> 00000000-0009fbff System RAM

> 0009fc00-0009ffff reserved

> 000a0000-000bffff Video RAM area

> 000c0000-000c7fff Video ROM

> 000f0000-000fffff System ROM

> 00100000-07ffcfff System RAM

> 00100000-00245388 Kernel code

> 00245389-002d0c03 Kernel data

> 07ffd000-07ffefff ACPI Tables

> 07fff000-07ffffff ACPI Non-volatile Storage

> e1000000-e100007f 3Com Corporation 3c905B 100BaseTX

> [Cyclone]

> e1800000-e3dfffff PCI Bus #01

> ?1800000-e1800fff ATI Technologies Inc 3D Rage Pro AGP 1X/2X

> ?2000000-e2ffffff ATI Technologies Inc 3D Rage Pro AGP 1X/2X

> ?2000000-e212bfff vesafb

> e3f00000-e3ffffff PCI Bus #01

> e4000000-e7ffffff Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX

> Host bridge

> ffff0000-ffffffff reserved

>

> 15. ioports

> IO-Address Description

> 0000-001f dma1

> 0020-003f pic1

> 0040-005f timer

> 0060-006f keyboard

> 0070-007f rtc

> 0080-008f dma page reg

> 00a0-00bf pic2

> 00c0-00df dma2

> 00f0-00ff fpu

> 01f0-01f7 ide0

> 02f8-02ff serial(set)

> 03c0-03df vesafb

> 03f6-03f6 ide0

> 03f8-03ff serial(set)

> 0cf8-0cff PCI conf1

> 9400-947f 3Com Corporation 3c905B 100BaseTX [Cyclone]

> 9400-947f 00:0c.0

> 9800-9803 ESS Technology ES1969 Solo-1 Audiodrive

> 9800-9803 ESS Solo1

> a000-a003 ESS Technology ES1969 Solo-1 Audiodrive

> ?000-a003 ESS Solo1

> a400-a40f ESS Technology ES1969 Solo-1 Audiodrive

> ?400-a40f ESS Solo1

> a800-a80f ESS Technology ES1969 Solo-1 Audiodrive

> ?804-a80f ESS Solo1

> b000-b03f ESS Technology ES1969 Solo-1 Audiodrive

> ?000-b00f ESS Solo1

> b400-b41f Intel Corp. 82371AB/EB/MB PIIX4 USB

> ?400-b41f usb-uhci

> b800-b80f Intel Corp. 82371AB/EB/MB PIIX4 IDE

> ?800-b807 ide0

> ?808-b80f ide1

> d000-dfff PCI Bus #01

> ?800-d8ff ATI Technologies Inc 3D Rage Pro AGP 1X/2X

> e400-e43f Intel Corp. 82371AB/EB/MB PIIX4 ACPI

> e800-e81f Intel Corp. 82371AB/EB/MB PIIX4 ACPI

>

> 16. irq

> 17. kcore

> 18. kmsg

> 19. ksyms : refer to System.map after build kernel source

> 20. loadavg : refer to "uptime" command

> 21. locks

> 22. meminfo : refer to "free", "top" command

> 23. misc

> 24. modules : modules in kernel : build in + insmod

> 25. mounts : refer to "mount", normally ln -s /proc/mounts

> /etc/mtab

> 26. mtrr

> 27. net

> 28. partitions : refer to "fdisk -l"

> major minor #blocks name

> 3 0 19551168 hda

> 3 1 4192933 hda1

> 3 2 88357 hda2

> 3 3 249007 hda3

> 3 4 15020775 hda4

>

> 29. pci

> 30. scsi

> 31. self : "self" process, symbolic to /proc/#PID

> 32. slabinfo

> 33. stat : cpu, swap, interrupt, diskio, boot time

> 34. swaps :

>

>Filename Type Size Used Priority

>/dev/hda3 partition 248996 26540 -1

>

>

> 35. sys

> 36. sysvipc : IPC

> 37. tty

> 38. uptime

> 39. version : refer to "uname -a" command

> 40. video

>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有