linux 系统调用_Linux系统调用初学者指南

linux 系统调用

在过去的几年中,我一直在使用容器进行大量工作。 早些时候,我看到了朱利安·弗里德曼Julien Friedman)的一次有趣的演讲,他在几行Go语言中编写了一个准容器。 它给了我一个“哈哈”的时刻,让我了解到容器只不过是Linux进程而对它们所运行的机器的视野有限。

建立此受限视图涉及Golang的syscall软件包中的许多调用 。 最初,我只是以其面值为基础,但是过了一会儿,我想剥离洋葱的下一层,以查看这些syscall的含义以及它们的工作方式。 我将分享我在OSCON上的演讲中学到的知识。

顾名思义, 系统调用是系统调用,它们是您可以从用户空间向Linux内核发出请求的方式。 内核会为您完成一些工作,例如创建一个进程,然后将控制权交还给用户空间。

有一种通用的机制可以使所有系统调用都转换为内核,这由libc库处理。 用户空间代码设置一些寄存器,包括它要进行的系统调用的ID以及需要传递给系统调用的任何参数。 它触发一个“陷阱”以将控制权转移到内核。

这就是用户空间代码发出内核请求的方式,但是Linux也具有伪文件系统,该文件系统允许内核将信息传达给用户空间。 内容看起来像普通目录和文件。

/ proc目录是一个很好的例子。 向内看,您会发现有关计算机上运行的进程的各种有趣信息。 在某些情况下,例如cgroup (控制组),用户空间可以通过写入这些伪文件系统下的文件来配置参数。

当您使用容器时,这特别有趣,因为主机的/ proc包含有关所有容器化进程的信息。 这包括环境变量,它们也存储在/ proc中 伪文件系统,这意味着您的主机可以访问所有正在运行的容器的环境。 如果通过环境变量将证书或数据库密码之类的机密传递到容器中,则可能会带来安全后果。

许多从事普通应用程序的程序员可能不会觉得自己经常使用syscall。 实际上是这样,因为即使日常活动(例如制作文件或更改目录)也涉及Linux上的syscall。

您不必成为系统程序员就可以享受syscall的乐趣!

如果您想了解更多信息,Liz将 在德克萨斯州奥斯汀举行的OSCON 2017上介绍 Syscall入门指南 如果您有兴趣参加会议,请 在注册时 使用以下折扣代码 PCOS

翻译自: https://opensource.com/article/17/5/beginners-guide-syscalls

linux 系统调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值