程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

Linux 常用系统调用

发表于 2021-04-14 | 分类于 Linux Kernel | 0 | 阅读次数 1685

常用系统调用

进程管理

  • fork 是创建进程的系统调用。在 Linux 中创建一个新的进程,需要父进程调用 fork 来实现。当 fork 创建子进程之后,子进程的所有东西包括程序代码都是跟父进程一样的。也就是说,父子进程都将从调用 fork 处返回,但是不同的是父进程调用 fork 之后,返回值是子进程的进程号(非 0 值);子进程调用 fork 之后,返回的值是 0。根据返回值来判断当前进程应该怎么做,如果是父进程则继续执行,如果是子进程则通过系统调用 execve 来加载新的程序。

  • waitpid,父进程可以使用 waitpid 并将子进程的进程号作为参数传进去,就可以知道子进程运行完了没有。

内存管理

  • brk 和 mmap 是负责在堆中分配内容的两个系统调用。分配的内存数量比较小的时候,使用 brk,会和原来的堆的数据连在一起。分配的内存数量比较大的时候,使用 mmap,会重新划分一块区域。

文件系统

  • 对于已经有的文件,使用 open 打开这个文件,close 关闭这个文件;
  • 对于没有的文件,使用 creat 创建文件;
  • 打开文件以后,使用 lseek 跳转到文件的某个位置;
  • 文件内容的读写,使用 read 和write

在 Linux 中有一个特点,那就是一切皆文件,一切皆文件的优势就是统一了操作的入口,提供了遍历,使用相同的操作即可。Linux 会为每个文件分配一个文件描述符(File Descriptor),这是一个整数。

  • 二进制程序文件是文件;
  • 文本文件是文件;
  • 内存输出到控制台上,控制台也是文件,stdout 文件。
  • 一个进程的输出可以作为另一个进程的输入,这种方式称为管道,管道也是一个文件;
  • 进程通过网络与其他进程进行通信,建立的 socket 也是文件;
  • 进程访问外部设备时,外部设备也是文件;
  • 文件被存储在文件夹中,文件夹也就是目录也是一个文件;
  • /proc 下面存放着进程的运行情况,也是一系列文件;

信号处理

  • kill 发送信号给另一个进程。

  • sigaction 系统调用注册一个信号处理函数。

操作系统中以下这几种情况会使用信号:

  • 在执行一个程序的时候,在键盘按下“CTRL+C”,就会触发中断的信号,正在执行的命名就会中止退出。
  • 非法访问内存
  • 硬件故障
  • 用户使用 kill 函数

进程间通信

  • 消息队列的方式。适合数据量不是特别大的情况,消息队列是在内核里的,msgget 系统调用创建一个新的队列,msgsnd 系统调用将消息发送到消息队列,msgrcv 从消息队列中取消息。
  • 共享内存的方式。适合交互信息量比较大的情况。shmget 创建一个共享内存块,shmat 将共享内存块映射到自己的内存空间。
  • 信号量机制 semaphore。sem_wait 占用信号量,sem_post 释放信号量。

网络通信

  • socket 系统调用可以创建一个 socket,socket 也是一个文件,也有一个文件描述符。需要网络通信的双方都需要创建一个 socket。

Linux 内核有对 TCP/IP 网络协议栈的实现,并使用套接字 socket 来提供网络服务。

巨人的肩膀

  1. 极客时间-《趣谈Linux操作系统》
卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/116
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Linux # Linux Kernel
LeetCode 200 道高频题【按照 Tag 分类】
Java | JVM 之内存管理相关知识
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%