Skip to content

Instantly share code, notes, and snippets.

View saka1's full-sized avatar
💭
Too busy 😩

saka1

💭
Too busy 😩
View GitHub Profile

A fork() in the road を読んで

HotOS 2019 で Microsoft Research からの論文である.Unixの代表的なシステムコールであるfork()についての問題点を挙げている.

概要

fork()は最も基本的なシステムコールといっても良く,新しいプロセスを作るときに使われる.今回の論文の主張はfork()は1970年代のマシンではハックと呼べるものだったが,現代では過去の負債となっているというものでおり,カーネルから完全に取り除くべきであるというものである.ただし,ここでいうカーネルとはLinuxカーネルのことを直接指しているのではなく,著者の先行研究でのOSの実装のことを指している.

面白いのは,fork()は研究者にとっては研究を阻害するといったことや,教育者は歴史としては教えるべきだが最初に教わるべきプロセス作成の仕組みとしてはふさわしくないといった中々過激なことを言っているところである.

問題点

現代的なコンピュータシステムにおける問題点として次のようなことが挙げられている.

  • かつてはシンプルであったが,最早そうではない
  • 25もの特別なケースが親プロセスの状態を子プロセスにコピーするときに存在する.例えば,ファイルロック,タイマー,非同期IOやトレーシングなど.また,コピー後のメモリマッピングに関して,madvice()に与えるフラグも非常に多いものとなっている.
@shyouhei
shyouhei / gist:266178ffedab5767a5b69b972c76f88a
Created September 27, 2017 07:31
優秀なプログラマーになるためのコツ

優秀なプログラマーになるためのコツ

重要な順で

優秀なプログラマーになるには非常に長い時間がかかるという現実を直視すべし

優秀なプログラマーというのは寝ている間に異世界に召喚されて無双するのとはわけが違うんですよ。

自分の例で言うとプログラミングを始めた中学生の時から優秀なプログラマだったかって、そんなわけない。みんなヘッポコからスタートしているに決まってるわけです。以来二十余年、地道に生き恥を晒し続けてきた結果として、現在いちおう業界の末席を汚すところまで来ている。このプロセスから目を背けるべきではないです。優秀なプログラマーに生まれる人間なんかいない。優秀なプログラマーに「育つ」んだし、それには時間が必要。今日から無双したいと思うな。

@yoffy
yoffy / resize.cpp
Last active June 14, 2020 13:23
bilinear image resampling (with AVX2)
// clang++ -c -std=c++11 -Wall -Wextra -Ofast -g -march=native -D NDEBUG
#include <stdint.h>
#include <math.h>
#include <vector>
#include <immintrin.h>
struct image
{
int width;
int height;
@mono0926
mono0926 / commit_message_example.md
Last active September 5, 2025 05:27
[転載] gitにおけるコミットログ/メッセージ例文集100
@sile
sile / damps-05.md
Last active June 30, 2019 20:33
Distributed Algorithms for Message-Passing Systems: 第五章

第五章 ネットワークを航行するモバイルオブジェクト

概要:

  • モバイルオブジェクト:
    • ユーザプロセスのリクエストに応じて、プロセスからプロセスへと移動する
  • この章では、モバイルオブジェクトがネットワークを航行するためのアルゴリズム、を扱う:
    • 性質の異なる三つの分散アルゴリズムを取り上げる
    • 全てのアルゴリズムは、以下を保証する:
  • 整合性: オブジェクトは同時に複数プロセスに存在しない
@gakuzzzz
gakuzzzz / 1_.md
Last active March 7, 2025 06:35
Scala の省略ルール早覚え

Scala の省略ルール早覚え

このルールさえ押さえておけば、読んでいるコードが省略記法を使っていてもほぼ読めるようになります。

メソッド定義

def concatAsString(a: Int, b: Int): String = {
  val a_ = a.toString();
  val b_ = b.toString();
@j5ik2o
j5ik2o / gist:2970973
Last active October 4, 2025 08:38
ペアプロの心得

ペアプロの心得

休憩をとる

1.定期的に休憩をとっていますか? ペアプログラミングは、精神的な体力を消耗します。定期的に休憩をとってリフレッシュすることがとても大切です。

謙虚になる

2.「色々な実装方針がある」という認識がありますか?