linux内核可以将功能划分为五个部分:进程管理、内存管理、文件系统、设备控制(驱动)、网络功能(摘自LDD3)。
1,进程管理:主要负责创建/销毁进程,处理进程的输入输出、进程间通信(IPC)、多任务以及并发管理;
2,内存管理:主要负责虚拟内存管理,内核在有限的资源纸上为每个进程都创建了一个虚拟地址空间
3,文件系统:文件和目录:VFS
4,设备控制:tty和设备访问
5,网络功能:由操作系统管理,大部分网络操作和具体进程无关,数据包的传入是异步事件,在某个进程处理这些数据包之前必须手机、标识和分发这些数据包。系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序的执行。另外,所有的路由和地址解析都有kernel处理。
linux内核这五部分主要是通过系统调用接口来实现各自功能的。关于系统调用,
以下转载于:http://blog.sina.com.cn/s/blog_703f58b101011qan.html
fork | 创建一个新进程 |
clone | 按指定条件创建子进程 |
execve | 运行可执行文件 |
exit | 中止进程 |
_exit | 立即中止当前进程 |
getdtablesize | 进程所能打开的最大文件数 |
getpgid | 获取指定进程组标识号 |
setpgid | 设置指定进程组标志号 |
getpgrp | 获取当前进程组标识号 |
setpgrp | 设置当前进程组标志号 |
getpid | 获取进程标识号 |
getppid | 获取父进程标识号 |
getpriority | 获取调度优先级 |
setpriority | 设置调度优先级 |
modify_ldt | 读写进程的本地描述表 |
nanosleep | 使进程睡眠指定的时间 |
nice | 改变分时进程的优先级 |
pause | 挂起进程,等待信号 |
personality | 设置进程运行域 |
prctl | 对进程进行特定操作 |
ptrace | 进程跟踪 |
sched_get_priority_max | 取得静态优先级的上限 |
sched_get_priority_min | 取得静态优先级的下限 |
sched_getparam | 取得进程的调度参数 |
sched_getscheduler | 取得指定进程的调度策略 |
sched_rr_get_interval | 取得按RR算法调度的实时进程的时间片长度 |
sched_setparam | 设置进程的调度参数 |
sched_setscheduler | 设置指定进程的调度策略和参数 |
sched_yield | 进程主动让出处理器,并将自己等候调度队列队尾 |
vfork | 创建一个子进程,以供执行新程序,常与execve等同时使用 |
wait | 等待子进程终止 |
wait3 | 参见wait |
waitpid | 等待指定子进程终止 |
wait4 | 参见waitpid |
capget | 获取进程权限 |
capset | 设置进程权限 |
getsid | 获取会晤标识号 |
setsid | 设置会晤标识号 |
|
|
fcntl | 文件控制 |
open | 打开文件 |
creat | 创建新文件 |
close | 关闭文件描述字 |
read | 读文件 |
write | 写文件 |
readv | 从文件读入数据到缓冲数组中 |
writev | 将缓冲数组里的数据写入文件 |
pread | 对文件随机读 |
pwrite | 对文件随机写 |
lseek | 移动文件指针 |
_llseek | 在64位地址空间里移动文件指针 |
dup | 复制已打开的文件描述字 |
dup2 | 按指定条件复制文件描述字 |
flock | 文件加/解锁 |
poll | I/O多路转换 |
truncate | 截断文件 |
ftruncate | 参见truncate |
umask | 设置文件权限掩码 |
fsync | 把文件在内存中的部分写回磁盘 |
access | 确定文件的可存取性 |
chdir | 改变当前工作目录 |
fchdir | 参见chdir |
chmod | 改变文件方式 |
fchmod | 参见chmod |
chown | 改变文件的属主或用户组 |
fchown | 参见chown |
lchown | 参见chown |
chroot | 改变根目录 |
stat | 取文件状态信息 |
lstat | 参见stat |
fstat | 参见stat |
statfs | 取文件系统信息 |
fstatfs | 参见statfs |
readdir | 读取目录项 |
getdents | 读取目录项 |
mkdir | 创建目录 |
mknod | 创建索引节点 |
rmdir | 删除目录 |
rename | 文件改名 |
link | 创建链接 |
symlink | 创建符号链接 |
unlink | 删除链接 |
readlink | 读符号链接的值 |
mount | 安装文件系统 |
umount | 卸下文件系统 |
ustat | 取文件系统信息 |
utime | 改变文件的访问修改时间 |
utimes | 参见utime |
quotactl | 控制磁盘配额 |
|
ioctl | I/O总控制函数 |
_sysctl | 读/写系统参数 |
acct | 启用或禁止进程记账 |
getrlimit | 获取系统资源上限 |
setrlimit | 设置系统资源上限 |
getrusage | 获取系统资源使用情况 |
uselib | 选择要使用的二进制函数库 |
ioperm | 设置端口I/O权限 |
iopl | 改变进程I/O权限级别 |
outb | 低级端口操作 |
reboot | 重新启动 |
swapon | 打开交换文件和设备 |
swapoff | 关闭交换文件和设备 |
bdflush | 控制bdflush守护进程 |
sysfs | 取核心支持的文件系统类型 |
sysinfo | 取得系统信息 |
adjtimex | 调整系统时钟 |
alarm | 设置进程的闹钟 |
getitimer | 获取计时器值 |
setitimer | 设置计时器值 |
gettimeofday | 取时间和时区 |
settimeofday | 设置时间和时区 |
stime | 设置系统日期和时间 |
time | 取得系统时间 |
times | 取进程运行时间 |
uname | 获取当前UNIX系统的名称、版本和主机等信息 |
vhangup | 挂起当前终端 |
nfsservctl | 对NFS守护进程进行控制 |
vm86 | 进入模拟8086模式 |
create_module | 创建可装载的模块项 |
delete_module | 删除可装载的模块项 |
init_module | 初始化模块 |
query_module | 查询模块信息 |
*get_kernel_syms | 取得核心符号,已被query_module代替 |
|
brk | 改变数据段空间的分配 |
sbrk | 参见brk |
mlock | 内存页面加锁 |
munlock | 内存页面解锁 |
mlockall | 调用进程所有内存页面加锁 |
munlockall | 调用进程所有内存页面解锁 |
mmap | 映射虚拟内存页 |
munmap | 去除内存页映射 |
mremap | 重新映射虚拟内存地址 |
msync | 将映射内存中的数据写回磁盘 |
mprotect | 设置内存映像保护 |
getpagesize | 获取页面大小 |
sync | 将内存缓冲区数据写回硬盘 |
cacheflush | 将指定缓冲区中的内容写回磁盘 |
|
getdomainname | 取域名 |
setdomainname | 设置域名 |
gethostid | 获取主机标识号 |
sethostid | 设置主机标识号 |
gethostname | 获取本主机名称 |
sethostname | 设置主机名称 |
|
socketcall | socket系统调用 |
socket | 建立socket |
bind | 绑定socket到端口 |
connect | 连接远程主机 |
accept | 响应socket连接请求 |
send | 通过socket发送信息 |
sendto | 发送UDP信息 |
sendmsg | 参见send |
recv | 通过socket接收信息 |
recvfrom | 接收UDP信息 |
recvmsg | 参见recv |
listen | 监听socket端口 |
select | 对多路同步I/O进行轮询 |
shutdown | 关闭socket上的连接 |
getsockname | 取得本地socket名字 |
getpeername | 获取通信对方的socket名字 |
getsockopt | 取端口设置 |
setsockopt | 设置端口参数 |
sendfile | 在文件或端口间传输数据 |
socketpair | 创建一对已联接的无名socket |
|
getuid | 获取用户标识号 |
setuid | 设置用户标志号 |
getgid | 获取组标识号 |
setgid | 设置组标志号 |
getegid | 获取有效组标识号 |
setegid | 设置有效组标识号 |
geteuid | 获取有效用户标识号 |
seteuid | 设置有效用户标识号 |
setregid | 分别设置真实和有效的的组标识号 |
setreuid | 分别设置真实和有效的用户标识号 |
getresgid | 分别获取真实的,有效的和保存过的组标识号 |
setresgid | 分别设置真实的,有效的和保存过的组标识号 |
getresuid | 分别获取真实的,有效的和保存过的用户标识号 |
setresuid | 分别设置真实的,有效的和保存过的用户标识号 |
setfsgid | 设置文件系统检查时使用的组标识号 |
setfsuid | 设置文件系统检查时使用的用户标识号 |
getgroups | 获取后补组标志清单 |
setgroups | 设置后补组标志清单 |
|
ipc | 进程间通信总控制调用 |
sigaction | 设置对指定信号的处理方法 |
sigprocmask | 根据参数对信号集中的信号执行阻塞/解除阻塞等操作 |
sigpending | 为指定的被阻塞信号设置队列 |
sigsuspend | 挂起进程等待特定信号 |
signal | 参见signal |
kill | 向进程或进程组发信号 |
*sigblock | 向被阻塞信号掩码中添加信号,已被sigprocmask代替 |
*siggetmask | 取得现有阻塞信号掩码,已被sigprocmask代替 |
*sigsetmask | 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask代替 |
*sigmask | 将给定的信号转化为掩码,已被sigprocmask代替 |
*sigpause | 作用同sigsuspend,已被sigsuspend代替 |
sigvec | 为兼容BSD而设的信号处理函数,作用类似sigaction |
ssetmask | ANSI C的信号处理函数,作用类似sigaction |
msgctl | 消息控制操作 |
msgget | 获取消息队列 |
msgsnd | 发消息 |
msgrcv | 取消息 |
pipe | 创建管道 |
semctl | 信号量控制 |
semget | 获取一组信号量 |
semop | 信号量操作 |
shmctl | 控制共享内存 |
shmget | 获取共享内存 |
shmat | 连接共享内存 |
shmdt | 拆卸共享内存 |
相关推荐
本文列出了大部分常见的 Linux 系统调用,并附有简要中文说明。 Linux 系统调用是操作系统提供给应用程序的接口,用于控制进程、文件系统、网络、设备等资源。以下是 Linux 系统调用的一个列表,包含了大部分常用...
`getuid()`是一个常见的系统调用,用于获取调用进程的有效用户ID。其实现涉及到对内核数据结构的访问,具体而言,是访问当前进程的task_struct结构体中的cred字段,从中提取uid成员的值。在用户空间,程序员可以通过...
4. **常见系统调用详解**:如`sys_open`、`sys_write`、`sys_read`等,分析其功能、参数含义以及对应的内核实现。 5. **系统调用调试**:讲解如何使用strace工具跟踪和分析程序中的系统调用行为,以及如何使用gdb...
三、常见的系统调用 1. `open()`: 打开文件或设备,返回文件描述符。 2. `read()`: 从文件描述符读取数据到用户空间。 3. `write()`: 将用户空间的数据写入到文件描述符表示的目标。 4. `close()`: 关闭指定的文件...
常见的系统调用如`open()`用于打开文件,`read()`用于读取文件,`write()`用于写入文件等。要添加新的系统调用,我们需要对内核源代码有深入的理解。 1. **定义系统调用接口**:首先,你需要为新系统调用设计一个...
"Linux 系统调用实现机制与系统调用实例分析" 一、系统调用概述 系统调用是操作系统中必不可少的一个组成部分,对于以该操作系统作为平台进行程序设计的程序员来说,系统调用提供了该系统面向用户的编程界面,程序...
在Linux操作系统中,系统调用和文件I/O是核心概念,它们构成了程序与硬件交互的基础。本主题将深入探讨这两个重要领域,特别是针对"19——Linux的系统调用与文件IO(二)"这一视频教程内容进行详细阐述。 首先,让...
以下是一些常见的Linux系统调用及其功能的详细说明: 1. **进程控制**: - `fork()`:创建一个与当前进程几乎完全一样的新进程,新进程被称为子进程。 - `clone()`:类似于`fork()`, 但提供了更多定制选项,如...
实验旨在加深学生对Linux系统调用机制的理解,熟悉Linux内核源代码结构,掌握添加新系统调用的步骤。 #### 考察的知识点包括: 1. **Linux系统调用的基本原理**:了解Linux系统调用的定义、作用、编号和调用过程。 ...
在Linux系统中,有许多常见的系统调用,例如: 1. `open()`:用于打开一个文件或者设备,返回一个文件描述符,后续的操作都将通过这个描述符进行。 2. `read()`和`write()`:分别用于从文件描述符对应的文件或设备...
常见的系统调用包括: - fork:复制当前进程创建一个新的子进程。 - execve:用于执行新程序,替换当前进程的映像。 - exit:终止当前进程并返回状态码给父进程。 - getpgid/setpgid:获取或设置进程组ID。 - ...
虽然题目没有明确提到Linux,但通常在讨论系统调用时,Linux是一个常见的参考。Linux系统的系统调用接口通常以 `sys_` 开头,如 `sys_open` 和 `sys_write`。Linux内核源代码中的 `include/asm-generic/unistd.h` ...
例如,`open`、`read` 和 `write` 等都是常见的系统调用。 在某些情况下,开发人员可能需要向Linux内核添加新的系统调用来满足特定的应用需求或优化性能。这涉及到对内核源代码的修改,并重新编译内核。下面将详细...
### libc库和系统调用详解 #### 一、libc库简介 libc库,全称为Standard C Library(标准C库),是遵循ANSI C标准的一种实现。它为C语言程序员提供了基本的操作功能,如文件处理、字符串操作等。尽管libc遵循的是...
在Linux环境中,PHP调用SO(Shared Object)文件是一种常见的技术,用于扩展PHP的功能或集成其他C库。SO文件是Linux下的动态链接库,相当于Windows系统中的DLL文件。本篇文章将深入探讨如何在PHP中使用SO文件,以及...
### Linux系统上Vivado调用VCS仿真的详细指南 #### 一、引言 在数字电路设计领域,FPGA(Field Programmable Gate Array,现场可编程门阵列)的设计与验证至关重要。随着设计复杂度的提升,高效的仿真成为确保设计...
通过以上实验,学生可以深入理解系统调用和库函数的区别,学习如何直接使用系统调用进行编程,以及掌握常见系统调用的功能和应用场景。同时,实验也强调了进程间的协作和通信,这对于理解和开发多进程应用程序至关...
- **系统调用与文件系统**:常见的系统调用如`open()`、`read()`、`write()`、`close()`等直接与文件系统交互,完成文件操作。 4. **模块编程**: - **内核模块**:在Linux中,模块是可以被动态加载和卸载的内核...
在Linux环境下,对文件进行访问有两种主要方式:一是通过系统调用(API),二是利用C语言的I/O库函数。这两种方法各有特点,但都为开发者提供了灵活的文件操作手段。 首先,让我们深入了解一下通过系统调用访问文件...