操作系统---系统调用

1、是应用程序同系统之间的接口。

2.系统调用原理

操作系统中的状态分为管态(核心态)和目态(用户态)。特权指令:一类只能在核心态下运行而不能在用户态下运行的特殊指令。不同的操作系统特权指令会有所差异,但是一般来说主要是和硬件相关的一些指令。访管指令:本身是一条特殊的指令,但不是特权指令。(trap指令)。基本功能:“自愿进管”,能引起访管异常

用户程序只在用户态下运行,有时需要访问系统核心功能,这时通过系统调用接口使用系统调用。

3.系统功能调用是操作系统提供给程序设计人员的一种服务。程序设计人员在编写程序时,可以利用系统调用来请求操作系统的服务。

4.系统调用和普通调用的区别

系统调用本质上是一种过程调用,但它是一种特殊的过程调用,与一般用户程序中的过程调用有明显的区别 。

运行状态不同

运行状态不同。系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。

调用方法不同

调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。

返回问题

返回问题。在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析――是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。

5.Linux操作系统中的系统调用接口

进程控制

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 设置主机名称

Socket 套接字

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 拆卸共享内存

时间: 2024-12-17 11:54:51

操作系统---系统调用的相关文章

操作系统ucore lab5实验报告

操作系统lab5实验报告 到实验四为止,ucore还一直在核心态"打转",没有到用户态执行.创建用户进程,让用户进程在用户态执行,且在需要ucore支持时,可通过系统调用来让ucore提供服务.而本实验将进程的执行空间扩展到了用户态空间,出现了创建子进程执行应用程序等.即实验五主要是分析用户进程的整个生命周期来阐述用户进程管理的设计与实现. 练习0 填写已有实验 这里和前几个实验一样,照样运用meld软件进行对比,大致的截图如下: 这里简单将我们需要修改的地方罗列如下: proc.c

linux下系统调用、API、系统命令,内核函数的区别与联系

1.系统调用: 应用程序和内核间的桥梁,是应用程序访问内核的入口点;但通常情况下,应用程序通过操作系统提供的API进行编程而不是使用系统调用直接编程; linux的全部系统调用加起来大约只有250个左右. 2.API: API常以c库(libc)的形式提供,c库提供了绝大部分API,每个系统调用在c库中都有对应的封装函数(通常封装函数与系统调用的名称相同).系统调用与c库函数并不是一一对应的,有些c库函数可能使用多个系统调用来实现,也有可能多个c库函数使用同一个系统调用来实现,也有些c库函数不使

Michael-Scott非阻塞队列(lock-free)算法的C实现

Michael-Scott非阻塞队列算法,即MS-queue算法,是1 9 9 6 年由Maged . M .Michael and M. L. Scott提出的,是最为经典的并发FIFO队列上的算法,目前很多对并发FIFO队列的研究都是基于这个算法来加以改进的.在共享内存的多核处理器上,这种基于Compare-and-swap(CAS)的算法在性能上要远远优于以前基于锁的算法,并且已经被Java并发包所采用.它的主要特点在于允许多线程并发的.无干扰的访问队列的头和尾. MS-queue算法依赖

2018-2019 20165215 《信息安全系统设计基础》第六周学习总结

2018-2019 20165215 <信息安全系统设计基础>第六周学习总结 Linux系统调用学习 操作系统(Operating System,简称OS)完成的工作比喻为两个角色:服务生和管家婆 管家婆: 通过「文件」对I/O设备进行了抽象 通过「虚存」对主存和I/O设备进行了抽象 通过「进程」对CPU.主存和I/O设备进行了抽象 服务生: GUI:为小白用户提供服务,你只会用鼠标就可以使用操作系统 Shell: 为高级用户提供服务,你要记忆系统命令,更多通过键盘使用操作系统 系统调用:为专

go调度: 第二部分-go调度器

前言 这个博客是三部分中提供go调度器的语义和机制的部分. 博客三部分的顺序: 1) go调度: 第一部分-操作系统调度 2) go调度: 第二部分-go调度器 3) go调度: 第三部分-并发 介绍 在博客三部分中的第一部分, 我解释了操作系统调度器中对理解go调度器机制重要的方面. 在博客的这部分, 我将在语义上解释go调度器如何工作, 并且关注于上层行为. go调度器是一个复杂的系统, 那些小的机制的细节不是很重要. 重要的是对事情是如何运行和表现有个好的模型. 这将允许你做出更好的决定.

海思Hi3519A MPP从入门到精通(一 系统概述)

1. 概述 海思提供的媒体处理软件平台(Media Process Platform,简称 MPP),可支持应用软件快速 开发.该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供 MPI(MPP Program Interface)接口完成相应功能.该平台支持应用软件快速开发以下 功能:输入视频捕获.H.265/H.264/JPEG 编码.H.265/H.264/JPEG 解码.视频输出显 示.视频图像前处理(包括去噪.增强.锐化).图像拼接.图像几何矫正.智能.音 频捕获及输

rocketmq最佳实践

最佳实践 1 生产者 1.1 发送消息注意事项 1 Tags的使用 一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识.tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags("TagA"). 2 Keys的使用 每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题.服务器会为每个消息创建索引(哈希索引),应用可以通过topic.key来查询这

万字长文带你还原进程和线程

我们平常说的进程和线程更多的是基于编程语言的角度来说的,那么你真的了解什么是线程和进程吗?那么我们就从操作系统的角度来了解一下什么是进程和线程. 进程 操作系统中最核心的概念就是 进程,进程是对正在运行中的程序的一个抽象.操作系统的其他所有内容都是围绕着进程展开的.进程是操作系统提供的最古老也是最重要的概念之一.即使可以使用的 CPU 只有一个,但它们也支持(伪)并发操作.它们会将一个单独的 CPU 变换为多个虚拟机的 CPU.没有进程的抽象,现代操作系统将不复存在. 所有现代的计算机会在同一时

操作系统运行环境与运行机制(系统调用篇)

系统调用: 用户在编程是可以调用的操作系统功能(使CPU可以从用户态陷入内核态)  应用程序,C函数,API,和内核函数关系 系统调用机制的设计 ①中断/异常机制 支持系统调用服务的实现:选择一条陷入指令(访管指令)即可 ②选择一条特殊指令:陷入指令(亦称访管指令) 引发异常完成用户态到内核态的切换 ③系统调用号和参数: 每个系统调用都实现给定一个编号(功能号) ④系统调用表: 存放系统调用服务例程入口地址 参数传递问题(怎样实现用户程序的参数(存在于用户栈)传递给内核(存在于内核栈)?): ①