From bcdac9d9e224bfe627217592f8eba30da106c6b5 Mon Sep 17 00:00:00 2001 From: shylinux Date: Thu, 9 May 2019 20:11:13 +0800 Subject: [PATCH] add linux note --- etc/dotsfile/.vimrc | 4 +- src/examples/code/code.go | 2 +- src/plugin/sort.go | 6 +- usr/wiki/自然/编程/后端技术栈/linux.md | 753 ++++++++++++++++++++++--- 4 files changed, 677 insertions(+), 88 deletions(-) diff --git a/etc/dotsfile/.vimrc b/etc/dotsfile/.vimrc index 4ab23c1e..02d9d150 100644 --- a/etc/dotsfile/.vimrc +++ b/etc/dotsfile/.vimrc @@ -137,8 +137,8 @@ nnoremap : nnoremap j gj nnoremap k gk -nnoremap :make -inoremap :makei +" nnoremap :make +" inoremap :makei nnoremap df :FZF inoremap df _ diff --git a/src/examples/code/code.go b/src/examples/code/code.go index c3b02eb5..754171c5 100644 --- a/src/examples/code/code.go +++ b/src/examples/code/code.go @@ -89,7 +89,7 @@ var Index = &ctx.Context{Name: "code", Help: "代码中心", "componet_view": "ScheduleList", "componet_init": "initScheduleList", "componet_ctx": "web.code", "componet_cmd": "schedule", "inputs": []interface{}{ - map[string]interface{}{"type": "choice", "name": "view", "value": "order", "label": "显示字段", "choice": []interface{}{ + map[string]interface{}{"type": "choice", "name": "view", "value": "default", "label": "显示字段", "choice": []interface{}{ map[string]interface{}{"name": "默认", "value": "default"}, map[string]interface{}{"name": "行程", "value": "order"}, map[string]interface{}{"name": "总结", "value": "summary"}, diff --git a/src/plugin/sort.go b/src/plugin/sort.go index 3bbeb8e9..d5e04e3c 100644 --- a/src/plugin/sort.go +++ b/src/plugin/sort.go @@ -39,14 +39,12 @@ func QuickSort(m *ctx.Message, level int, data []int, left int, right int) { for ; p < r && data[p] < data[r]; r-- { } if p < r { - data[p], data[r] = data[r], data[p] - p = r + p, data[p], data[r] = r, data[r], data[p] } for ; l < p && data[l] < data[p]; l++ { } if l < p { - data[l], data[p] = data[p], data[l] - p = l + p, data[l], data[p] = l, data[p], data[l] } } diff --git a/usr/wiki/自然/编程/后端技术栈/linux.md b/usr/wiki/自然/编程/后端技术栈/linux.md index 5c71ed4b..1c513549 100644 --- a/usr/wiki/自然/编程/后端技术栈/linux.md +++ b/usr/wiki/自然/编程/后端技术栈/linux.md @@ -1,4 +1,109 @@ -## linux +## GNU + +- 官网: +- grub: +- bash: +- libc: +- gcc: +- gdb: + +C99 +``` +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +``` +POSIX.1 +``` +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +``` +## LINUX - 官网: - 文档: @@ -7,7 +112,8 @@ - 代理: -## 内核源码 +## 系统内核 +### 内核源码 lib arch @@ -42,10 +148,12 @@ Documentation MAINTAINERS REPORTING-BUGS -## 系统启动 +### 系统启动 ``` startup_32() // linux-2.6.12/arch/i386/kernel/head.S:57 start_kernel() // linux-2.6.12/init/main.c:424 + do_basic_setup() + sock_init() // net/socket.c:2025 sched_init() trap_init() // arch/i386/kernel/traps.c init_IRQ() @@ -55,13 +163,64 @@ start_kernel() // linux-2.6.12/init/main.c:424 time_init_hook() setup_irq(0, timer_interrupt) ``` - -## 进程调度 +### 进程调度 ``` +struct task_struct { // linux-3.7.4/include/linux/sched.h:1190 + // 进程状态 + state long / TASK_RUNNING // include/linux/sched.h:108 + + // 线程信息 + thread_info *struct thread_info + task *struct task_struct + status + + // 进程树 + parent *struct task_struct + children struct list_head + sibling struct list_head + + mm *struct mm_struct + start_code + end_code + start_data + end_data + start_brk + brk + mmap_base + start_stack + arg_start + arg_end + env_start + env_end + + thread struct thread_struct + sp0 + sp + es + ds + fsindex + gsindex + ip + fs + gs + + fs *struct fs_struct + files *struct files_struct + pid pid_t + tgid pit_t +} + schedule() ``` -## 系统中断 +### 时间管理 +``` +timer_interrupt() // arch/i386/kernel/time.c:292 +do_timer_interrupt() // arch/i386/kernel/time.c:250 + do_timer_interrupt_hook() + do_timer() // kernel/timer.c:925 +``` +### 系统中断 ``` interrupt() // arch/i386/kernel/entry.S:397 do_IRQ() // arch/i386/kernel/irq.c:51 @@ -76,24 +235,14 @@ tasklet_schedule() // include/linux/interrupt.h run_workqueue() // kernel/workqueue.c:145 ``` - -## 并发同步 +### 并发同步 ``` atomic_add() // include/asm-i386/atomic.h spin_lock_irq() // include/linux/spinlock.h down_interruptible() // include/asm-i386/semaphore.h wait_for_completion() // kernel/sched.c ``` - -## 时间管理 -``` -timer_interrupt() // arch/i386/kernel/time.c:292 -do_timer_interrupt() // arch/i386/kernel/time.c:250 - do_timer_interrupt_hook() - do_timer() // kernel/timer.c:925 -``` - -## 系统调用 +### 系统调用 ``` system_call() // arch/i386/kernel/entry.S:225 sys_call_table[] // arch/i386/kernel/syscall_table.S @@ -132,50 +281,523 @@ sys_call_table[] // arch/i386/kernel/syscall_table.S fd_install() .long sys_close - .long sys_waitpid - .long sys_creat - .long sys_link - .long sys_unlink /* 10 */ - .long sys_execve - .long sys_chdir - .long sys_time + .long sys_socketcall // net/socket.c:1897 + sys_socket() + socket_create() + __sock_create() + net_families[i]->create()/inet_create() + inetsw_array[j]->prot->init()/tcp_v2_init_sock() + sys_bind() + sys_connect() + sys_listen() + sys_accept() + sys_getsocketname() + sys_getpeername() + sys_socketpair() + sys_send() + sys_sendto() + sys_sendto() + socket_sendmsg() + __sock_sendmsg() + sys_recv() + sys_recvfrom() + sys_recvfrom() + sock_recvmsg() + __sock_recvmsg() + sock->ops->recvmsg()/inetsw_array[j]->ops->recvmsg()/inet_stream_ops->recvmsg()/sock_common_recvmsg() + sk->sk_prot->recvmsg()/inetsw_array[j]->prot->recvmsg()/tcp_prot->recvmsg()/tcp_recvmsg() + sk_wait_data() + prepare_to_wait(sk->sk_sleep) + sk_wait_event() + release_sock() + __release_sock() + sk->sk_backlog_rcv()/sk->sk_prot->backlog_rcv()/inetsw_array[j]->prot->backlog_rcv()/tcp_prot->backlog_rcv()/tcp_v4_do_rcv() + sys_shutdown() + sys_setsocketopt() + sys_getsocketopt() + sys_sendmsg() + sys_recvmsg() + ... ``` -## 进程管理 +## 网络编程 +### 网络协议 +MAC ARP +IP ICMP +TCP UDP SCTP +RIP BGP OSPF +DNS NAT DHCP +FTP SSH SNMP +SMTP IMAP POP3 +HTTP HTML + +### 网络命令 ``` -struct task_struct { - // 进程状态 - state long / TASK_RUNNING // include/linux/sched.h:108 +ifconfig +nslookup +netstat +tcpdump +telnet +ping +wget +curl - // 线程信息 - thread_info *struct thread_info - task *struct task_struct - status +/etc/resolve.conf +/etc/hostname +/etc/hosts +``` - // 进程树 - parent *struct task_struct - children struct list_head - sibling struct list_head +### 网络编程 +``` +#include +socket() +bind() +listen() +accept() +connect() +recv() +send() +shutdown() - mm *struct mm_struct - binfmt *struct linux_binfmt - thread struct thread_struct - esp0 - eip - esp - fs - gs +#include +socket_in: struct + sin_len: uint8_t + sin_family: sa_family_t + sin_port: in_port_t + sin_addr: struct in_addr + s_addr: in_addr_t +htons() +ntohs() - fs *struct fs_struct - files *struct files_struct - signal *struct signal_struct +#include +inet_addr() +inet_ntoa() +inet_aton() - pid pid_t - tgit pid_t +#include +gethostbyname() +gethostbyaddr() +getservbyname() +getservbyport() +``` + +### 系统调用 +``` +socket()/sys_socket() // net/socket.c:1180 + sock_create(family, type, protocol, &sock) + __sock_create(family, type, protocol, res, 0) + net_families[PF_INET]->create(sock, protocol)/inet_create() + sock_init_data(sock, sk) + skb_queue_head_init(&sk->sk_receive_queue) + skb_queue_head_init(&sk->sk_write_queue) + skb_queue_head_init(&sk->sk_error_queue) + sk->sk_state_change = sock_def_wakeup + sk->sk_data_ready = sock_def_readable + sk->sk_prot->init(sk)/tcp_v4_init_sock() + tcp_init_xmit_timers(sk) + tp->retransmit_timer.function = &tcp_write_timer + tp->delack_timer.function = &tcp_delack_timer + sk->sk_timer.function = &tcp_keepalive_timer + sk->sk_state = TCP_CLOSE + sock_map_fd(sock) + file->f_op = SOCK_INODE(sock)->i_fop = &socket_file_ops + +bind()/sys_bind() // net/socket.c:1276 + sock->ops->bind(sock)/inet_bind() + +listen()/sys_listen() // net/socket.c:1306 + sock->ops->listen(sock)/inet_listen() // net/ipv4/af_inet.c:193 + tcp_listen_start(sk) + tp->accept_queue = tp->accept_queue_tail = NULL + +accept()/sys_accept() // net/socket.c:1340 + sock->ops->accept(sock, newsock)/inet_accept() // net/ipv4/af_inet.c:590 + sk1->sk_prot->accept(sk1)/tcp_accept() // net/ipv4/tcp.c:1895 + wait_for_connect(sk, timeo) + prepare_to_wait_exclusive(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE) + tp->accept_queue->sk + +connect()/sys_connect() // net/socket.c:1410 + sock->ops->connect()/inet_stream_connect() // net/ipv4/af_inet.c:504 + sk->sk_prot->connect(sk)/tcp_v4_connect() // net/ipv4/tcp_ipv4.c:747 + tcp_set_state(sk, TCP_SYN_SENT) // include/net/tcp.h:1607 + tcp_v4_hash_connect(sk) + tcp_connect(sk) // net/ipv4/tcp_output.c:1481 + __skb_queue_tail(&sk->sk_write_queue, buff) + tcp_transmit_skb(sk, skb_clone(buff, GFP_KERNEL)) + tcp_reset_xmit_timer(sk, TCP_TIME_RETRANS, tp->rto) + inet_wait_for_connect(sk, timeo) + prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE) + +recv()/sys_recv() // net/socket.c:1592 + sock_recvfrom() + sock_recvmsg() + __sock_recvmsg() + sock->ops->recvmsg()/inetsw_array[j]->ops->recvmsg()/inet_stream_ops->recvmsg()/sock_common_recvmsg() + sk->sk_prot->recvmsg()/inetsw_array[j]->prot->recvmsg()/tcp_prot->recvmsg()/tcp_recvmsg() + sk_wait_data() + prepare_to_wait(sk->sk_sleep) + sk_wait_event() + release_sock() + __release_sock() + sk->sk_backlog_rcv()/sk->sk_prot->backlog_rcv()/inetsw_array[j]->prot->backlog_rcv()/tcp_prot->backlog_rcv()/tcp_v4_do_rcv() +send()/sys_send() // net/socket.c:1541 + sys_send_to() + sock_sendmsg(sock, &msg, len) + __sock_sendmsg(&iocb, sock, msg, size) + sock->ops->sendmsg(iocb, sock, msg, size)/tcp_sendmsg() + skb_entail(sk, tp, skb) + __skb_queue_tail(&sk->sk_write_queue, skb) + sk->sk_send_head = skb + tcp_push_one(sk, mss_now) + tcp_transmit_skb(sk, skb_clone(skb, sk->sk_allocation)) + +shutdown()/sys_shutdown() // net/socket.c:1660 + sock->ops->shutdown(sock, how)/inet_shutdown() // net/ipv4/af_inet.c:671 + sk->sk_prot->shutdown(sk, how)/tcp_shutdown() // net/ipv4/tcp.c:1571 + tcp_close_state() + tcp_send_fin() // net/ipv4/tcp_output.c:1247 +``` + +### 内核模块 +``` +static struct inet_protosw inetsw_array[] = { // net/ipv4/af_inet.c:857 + { + type/SOCK_STREAM + protocol/IPPROTO_TCP + prot/tcp_prot // net/ipv4/tcp_ipv4.c:2593 + init/tcp_v4_init_sock + accept/tcp_accept + connect/tcp_v4_connect + sendmsg/tcp_sendmsg + recvmsg/tcp_recvmsg + shutdown/tcp_shutdown, + ops/inet_stream_ops // net/ipv4/af_inet.c:777 + bind/inet_bind + listen/inet_listen + accept/inet_accept + connect/inet_stream_connect + sendmsg/inet_sendmsg + recvmsg/sock_common_recvmsg + shutdown/inet_shutdown + }, } + +struct tcp_func ipv4_specific = { // net/ipv4/tcp_ipv4.c:2023 + syn_recv_sock/tcp_v4_syn_recv_sock + conn_request/tcp_v4_conn_request + send_check/tcp_v4_send_check + queue_xmit/ip_queue_xmit +} + +enum { // include/linux/tcp.h:59 + TCP_ESTABLISHED = 1, + TCP_SYN_SENT, + TCP_SYN_RECV, + TCP_FIN_WAIT1, + TCP_FIN_WAIT2, + TCP_TIME_WAIT, + TCP_CLOSE, + TCP_CLOSE_WAIT, + TCP_LAST_ACK, + TCP_LISTEN, + TCP_CLOSING, /* now a valid state */ + + TCP_MAX_STATES /* Leave at the end! */ +}; + +module_init(inet_init) net/ipv4/af_inet.c:1115 + inet_init() net/ipv4/af_inet.c:1012 + sock_register() + net_families[PF_INET]=inet_family_ops + proto_register(&tcp_prot, 1) + proto_register(&udp_prot, 1) + proto_register(&raw_prot, 1) + arp_init() + ip_init() + dev_add_pack() + tcp_v4_init() + tcp_init() + icmp_init() ``` +### 网卡驱动 +``` +e1000_up() // drivers/net/e1000/e1000_main.c:297 + e1000_configure_rx() + adapter->clean_rx = e1000_clean_rx_irq + request_irq(e1000_intr) +e1000_intr() + adapter->clean_rx()/e1000_clean_rx_irq() + netif_receive_skb(skb) + deliver_skb(skb, pt_prev) + pt_recv->func()/ip_rcv() // net/ipv4/ip_input():360 + ip_rcv_finish() + dst_input() + skb->dst->input()/ip_local_deliver() + ip_local_deliver_finish() + ipprot->handler()/tcp_v4_rcv() + tcp_v4_do_rcv() + TCP_LISTEN? tcp_v4_hnd_req(sk, skb) + tcp_check_req(sk, skb, req, prev) + tcp_acceptq_queue(sk, req, child) + tp->accept_queue = req + tcp_rcv_state_process() +tcp_rcv_state_process() // net/ipv4/tcp_input.c:4688 + TCP_LISTEN? tp->af_specific->conn_request()/tcp_func->conn_request()/tcp_v4_conn_request() // net/ipv4/tcp_ipv4.c:1396 + tcp_v4_send_synack(sk, req, dst) + TCP_SYN_SENT? tcp_rcv_synsent_state_process(sk, skb, th, len) + th->ack&&th->syn? tcp_ack(sk, skb, FLAG_SLOWPATH) + th->ack&&th->syn? tcp_set_state(sk, TCP_ESTABLISHED) + sk_wake_async(sk, 0, POLL_OUT); + th->rst? tcp_reset() + tcp_done() + tcp_set_state(sk, TCP_CLOSE) + th->ack? + TCP_SYN_RECV? tcp_set_state(sk, TCP_ESTABLISHED) + TCP_SYN_RECV? sk_wake_async(sk,0,POLL_OUT) + TCP_FIN_WAIT1? tcp_set_state(sk, TCP_FIN_WAIT2) + TCP_CLOSING? tcp_time_wait(sk, TCP_TIME_WAIT, 0) + TCP_LAST_ACK? tcp_done() + tcp_urg(sk, skb, th) + TCP_ESTABLISHED? tcp_data_queue(sk, skb) + __skb_queue_tail(&sk->sk_receive_queue, skb) + th->fin? tcp_fin(skb, sk, th) + TCP_SYN_RECV? tcp_set_state(sk, TCP_CLOSE_WAIT) + TCP_ESTABLISHED? tcp_set_state(sk, TCP_CLOSE_WAIT) + TCP_FIN_WAIT1? tcp_send_ack(sk); + TCP_FIN_WAIT1? tcp_set_state(sk, TCP_CLOSING); + TCP_FIN_WAIT2? tcp_send_ack(sk); + TCP_FIN_WAIT2? tcp_set_state(sk, TCP_TIME_WAIT); + sk->sk_data_ready()/sock_def_readable() + wake_up_interruptible(sk->sk_sleep) + sk_wake_async(sk,1,POLL_IN) +``` + +## 并发编程 +### 文件 +``` +#include +#include +fcntl()sys_fcntl() // fs/fcntl.c:333 +open()/sys_open() // fs.open.c:933 + fd = get_unused_fd() + f = filp_open() + nd = open_namei(filename) + path_lookup(name, nd) + nd->mnt = mntget(current->fs->rootmnt); + nd->dentry = dget(current->fs->root); + nd->mnt = mntget(current->fs->pwdmnt); + nd->dentry = dget(current->fs->pwd); + link_path_walk(name, nd); + __link_path_walk(name, nd); + do_lookup(nd, &this, &next); + real_lookup(nd->dentry, name, nd); + dir->i_op->lookup(dir, dentry, nd)/ext3_lookup() + ext3_find_entry(dentry, &de) + __lookup_hash(&nd->last, nd->dentry, nd) + cached_lookup(base, name, nd) + new = d_alloc(base, name) + inode->i_op->lookup(inode, new, nd) + vfs_create(dir->d_inode, path.dentry, mode, nd) + dir->i_op->create(dir, dentry, mode, nd)/ext3_create() + inode = ext3_new_inode(handle, dir, mode) + new_inode() + alloc_inode(sb) + sb->s_op->alloc_inode(sb) + inode->i_op = &ext3_file_inode_operations; + inode->i_fop = &ext3_file_operations; + dentry_open(nd.dentry, md.mnt) + f->f_dentry = dentry + f->f_vfsmnt = mnt + inode = dentry->d_inode + f->f_op = fops_get(inode->i_fop) + f->f_op->open(inode,f) + fd_install(fd, f) + files->fd[fd] = f +read()/sys_read() // fs/read_write.c:312 + file_pos_read() + vfs_read() + rw_verify_area(READ, file, pos, count) + locks_mandatory_area() + __posix_lock_file(inode, &fl) + wait_event_interruptible(fl.fl_wait, !fl.fl_next) + file->f_op->read(file, buf, count, pos)/do_sync_read() + filp->f_op->aio_read(&kiocb, buf, len, kiocb.ki_pos)/generic_file_aio_read() + __generic_file_aio_read(iocb, &local_iov, 1, &iocb->ki_pos) + do_generic_file_read(filp,ppos,&desc,file_read_actor) + do_generic_mapping_read(filp->f_mapping) + find_get_page(mapping, index) + radix_tree_lookup(&mapping->page_tree, offset) + page_cache_get(page) + mapping->a_ops->readpage(filp, page)/ext3_readpage() + mpage_readpage() + do_mpage_readpage() + mpage_bio_submit(READ, bio) + submit_bio(rw, bio) + generic_make_request(bio) + block_wait_queue_running(q) + prepare_to_wait_exclusive(&rl->drain, &wait, TASK_UNINTERRUPTIBLE) + file_pos_write() +write()/sys_write() // fs/sys_write():330 + file_pos_read(file) + vfs_write(file, buf, count, &pos) + rw_verify_area(WRITE, file, pos, count) + file->f_op->write(file, buf, count, pos)/do_sync_write() + filp->f_op->aio_write(&kiocb, buf, len, kiocb.ki_pos)/ext3_file_write() + generic_file_aio_write(iocb, buf, count, pos) + __generic_file_aio_write_nolock(iocb, &local_iov, 1, &iocb->ki_pos) + generic_file_buffered_write(iocb, iov, nr_segs, pos, ppos, count, written) + a_ops->commit_write(file, page, offset, offset+bytes)/ext3_writeback_commit_write() + generic_commit_write(file, page, from, to) + __block_commit_write(inode,page,from,to) + sync_page_range(inode, mapping, pos, ret) + file_pos_write(file, pos) +current:*struct task_struct + fs:*struct fs_struct + pwd:*struct dentry + root:*struct dentry + altroot:*struct dentry + pwdmnt:*struct vfsmount + rootmnt:*struct vfsmount + altrootmnt:*struct vfsmount + files:*struct files_struct + fd:**struct file // include/linux/fs.h:576 + f_pos:loff_t + f_count:atomic_t + f_op:*struct file_operations + f_dentry:*struct dentry // include/linux/dcache.h:83 + d_name:struct qstr + d_inode:*struct inode // include/linux/fs.h:427 + i_ino:unsigned long + i_size:loff_t + i_op:*struct inode_operations/ext3_dir_inode_operations + lookup:ext3_lookup + create:ext3_create + i_op:*struct inode_operations/ext3_file_inode_operations + i_op:*struct inode_operations/ext3_symlink_inode_operations + i_op:*struct inode_operations/ext3_fast_symlink_inode_operations + + i_fop:*struct file_operations/ext3_dir_operations + i_fop:*struct file_operations/ext3_file_operations + open:generic_file_open + ioctl:ext3_ioctl + read:do_sync_read + write:do_sync_write + aio_read:generic_file_aio_read + aio_write:ext3_file_write + llseek:generic_file_llseek + release:ext3_release_file + i_mapping:*struct address_space + a_ops:*struct address_space_operations/ext3_writeback_aops + commit_write:ext3_writeback_commit_write + writepage:ext3_writeback_writepage + d_op:*struct dentry_operations + d_sb:*struct super_block + s_op:*struct super_operations + f_vfsmnt:*struct vfsmount + +ext3_sops:struct super_operations + alloc_inode:ext3_alloc_inode + destroy_inode:ext3_destroy_inode + read_inode:ext3_read_inode + write_inode:ext3_write_inode +module_init(init_ext3_fs) + register_filesystem(&ext3_fs_type) +``` + +``` +/dev/null +/dev/stdio +/dev/stdout +/dev/stderr + + +#include +STDIN_FILENO +STDOUT_FILENO +STDERR_FILENO + +read() +write() +lseek() +close() + +ioctl() + +sync() +fsync() +fdatasync() +``` + +### 信号 +signal() + +### 进程并发 +fork() +exec() +exit() +wait() + +### 线程并发 +pthread_create() +pthread_self() +pthread_exit() +pthread_join() +pthread_detach() + +pthread_mutex_lock() +pthread_mutex_unlock() + +pthread_cond_wait() +pthread_cond_signal() + +## 系统编程 +### 启动 +/etc/passwd +/etc/shadow + fork() + setsid() +### 配置 +### 多路 +select() +epoll() +``` +``` +### 日志 +``` +#include +errno:int + +#include +strerror() + +#include +perror() + +#include +syslog() +``` + +### 用户 +``` +/etc/passwd +/etc/shadow +/etc/group + +getuid() +getpid() +``` + +### 调试 +### 定时 +### 延时 +alarm() + +### 集群 +### 存储 + ## Compile ``` linux-3.7.4/Makefile @@ -255,35 +877,4 @@ formats[i]->load_binary() prepare_binprm() search_binary_handler() -struct task_struct { // linux-3.7.4/include/linux/sched.h:1190 - mm *struct mm_struct - start_code - end_code - start_data - end_data - start_brk - brk - mmap_base - start_stack - arg_start - arg_end - env_start - env_end - - thread struct thread_struct - sp0 - sp - es - ds - fsindex - gsindex - ip - fs - gs - - fs *struct fs_struct - files *struct files_struct - pid pid_t - tgid pit_t -} ```