操作系统学习--系统调用

Posted LilRed

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统学习--系统调用相关的知识,希望对你有一定的参考价值。

系统调用

在电脑中,系统调用(英语:system call),指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态执行。如设备IO操作或者进程间通信。

有关进程管理的系统调用 (UNIX)

Pid = fork() 创建一个与父进程相同的子进程;Pid = waipid(pid,&statioc,options) 等待子进程结束;S = execve(name,argv,environp) 更换进程映像;exit(status) 进程结束,返回状态

fork的示例

main()
    int i, pid;
    for(i = 1;i <= 3;i++)
        if((pid = fork()) == 0)
            printf("In child %d. \\n",i);
        
    

在这个示例中,虽然看起来循环了3次,但是对于fork进程而言,第一次循环共有2个进程,第二次共有4个进程,第三次共有了8个进程,如下图:

进程在内存中的地址空间

进程有三种类型的段:正文,数据,堆栈

有关文件管理的系统调用

Fd = open(file,how,...) 打开一个文件

S -= close(fd) 关闭一个文件

n = read(fd,buffer,nbytes) 从文件中读取数据

n = write(fd,buffer,nbytes) 写数据到文件中

Position = lseek(fd,offset,whence) 改变文件的读写指针

S = stat(name,&buf) 取文件的状态

有关目录管理的系统调用

S = mkdir(name,mode) 创建一个新目录

S = rmdir(name) 删除一个空目录

S = link(name1,name2) 创建一个目录项name2,指向name1

S = unlink(name) 删除一个目录项

S = mount(special,name,flag) 安装一个文件系统

S = umount(special) 拆卸一个文件系统

目录管理的示例

假设有以下目录:

"/usr/jim/memo""/usr/ast"

其中/memo/jim中的ID是70,现有以下代码:

link("/usr/jim/memo","/usr/ast/note");

其作用就是在"/usr/ast"中创建一个目录/note,其ID与/memo的ID相同,为70. 这就是连接/usr/jim/memo/ast的目录前。

mount

对于下列代码:

mount("dev/fd0","/mnt",0)

其作用就是在/mnt下安装dev/fd0这个目录。

(事实上,fd0 很可能是个设备,比如磁盘,软盘等)

其他系统调用

S = chdir(dirname)改变当前目录;

S = chmod(name,mode) 改变文件权限;

S = kill(pid,signal) 给一个进程发送信号;

Seconds = time(&seconds) 取1970年1月1日以来的秒数。

以上是关于操作系统学习--系统调用的主要内容,如果未能解决你的问题,请参考以下文章

2018-2019-1 20175234 《信息安全系统设计基础》有关系统调用的部分学习

Golang源码学习:调度逻辑系统调用

Golang源码学习:调度逻辑系统调用

Linux内核学习第五周 系统调用

Windows内核学习笔记之浅析系统调用

学习&理解Linux下的系统调用过程