• Stars
    star
    2,394
  • Rank 18,620 (Top 0.4 %)
  • Language
    Go
  • License
    BSD 3-Clause "New...
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Biscuit research OS

Biscuit research OS

Biscuit is a monolithic, POSIX-subset operating system kernel in Go for x86-64 CPUs. It was written to study the performance trade-offs of using a high-level language with garbage collection to implement a kernel with a common style of architecture. You can find research papers about Biscuit here: https://pdos.csail.mit.edu/projects/biscuit.html

Biscuit has some important features for getting good application performance:

  • Multicore
  • Kernel-supported threads
  • Journaled FS with concurrent, deferred, and group commit
  • Virtual memory for copy-on-write and lazily mapped anonymous/file pages
  • TCP/IP stack
  • AHCI SATA disk driver
  • Intel 10Gb NIC driver

Biscuit also includes a bootloader, a partial libc ("litc"), and some user space programs, though we could have used GRUB or existing libc implementations, like musl.

This repo is a fork of the Go repo (https://github.com/golang/go). Nearly all of Biscuit's code is in biscuit/.

Install

The root of the repository contains the Go 1.10.1 tools/runtime. Some of Biscuit's code is modifications to the runtime, mostly in src/runtime/os_linux.go.

Biscuit used to build on Linux and OpenBSD, but probably only builds on Linux currently. You must build Biscuit's modified Go runtime before building Biscuit:

$ git clone https://github.com/mit-pdos/biscuit.git
$ cd biscuit/src
$ ./make.bash

then go to Biscuit's main part and launch it:

$ cd ../biscuit
$ make qemu CPUS=2

Biscuit should boot, then you can type a command:

# ls

Troubleshooting

  • You need qemu-system-x86_64 and python2 in your environment. If your distribution does not name them that way, you have to fix the naming, path, etc.

  • If the GOPATH environment variable doesn't contain biscuit/, the build will fail with something like:

src/ahci/ahci.go:8:8: cannot find package "container/list" in any of:
...

Either unset GOPATH or set it explicitly, for example (assuming that your working directory is where the GNUMakefile is):

$ GOPATH=$(pwd) make qemu CPUS=2

Contributing

Please feel free to hack on Biscuit! We're happy to accept contributions.

More Repositories

1

xv6-public

xv6 OS
C
7,277
star
2

xv6-riscv

Xv6 for RISC-V
C
5,888
star
3

noria

Fast web applications through dynamic, partially-stateful dataflow
Rust
4,938
star
4

xv6-riscv-book

Text describing xv6 on RISC-V
TeX
538
star
5

RVirt

RISC-V hypervisor written in Rust
Rust
329
star
6

xv6-book

Commentary for xv6-public
Perl
235
star
7

fscq

FSCQ is a certified file system written and proven in Coq
Coq
231
star
8

xv6-riscv-fall19

6.S081/6.828 lab repo for fall 2019
C
191
star
9

perennial

Verifying concurrent crash-safe systems
Coq
132
star
10

6.828-qemu

qemu patched for debugging, used for 6.828
C
76
star
11

noria-ui

Web UI for Noria clusters
JavaScript
67
star
12

noria-mysql

MySQL/MariaDB protocol shim for Noria
Rust
66
star
13

go-journal

Verified, concurrent, crash-safe transaction system
Go
44
star
14

mcqc

A Gallina compiler with C++17 as an intermediate representation
Haskell
40
star
15

go-nfsd

Fast NFS server implemented using GoJournal
Go
38
star
16

ward

C++
29
star
17

daisy-nfsd

DaisyNFS is an NFS server verified using Dafny and Perennial.
Dafny
27
star
18

sigmaos

Go
24
star
19

scalefs

C
21
star
20

dsrg

Distributed Systems Reading Group
CSS
20
star
21

secfs-skeleton

Skeleton code for new 6.858 final project --- an encrypted and authenticated file system
Python
19
star
22

perflock

RWMutex for sharing of multicore machines.
C
15
star
23

6.826-2017-labs

Coq
13
star
24

vmvcc

Go
13
star
25

6.826-2020-labs

Lab assignments for 6.826
Coq
12
star
26

6.S060-labs

Programming labs for 6.S060 (Foundations of Computer Security).
Python
12
star
27

what

An improved version of `w`
Python
12
star
28

argosy

Proving crash safety for systems with layered recovery
Coq
11
star
29

cspec

Verifying concurrent code with layers and movers
Coq
11
star
30

6.826-2019-labs

Lab assignments for 6.826
Coq
10
star
31

syndicate

Syndicate multiplexes several distributed master-slave applications onto a single cluster of machines.
Go
9
star
32

gokv

Go
7
star
33

mailbot

Bot to send email notifications when pushing to GitHub
Shell
7
star
34

deepspec-pocs

Coq
6
star
35

6.1600-labs

Student lab assignments for MIT 6.1600
Python
6
star
36

spectrebench

C++
5
star
37

6.5660-lab-2023

Python
4
star
38

grove-artifact

Python
3
star
39

noria-benchmarks

Experiment scripts and results for Soup
Rust
3
star
40

6.1600-notes

TeX
3
star
41

perennial-examples

Examples verified using Perennial
Go
3
star
42

csail-events-slack

Simple Slack webhook for posting notifications about upcoming CSAIL seminars
Ruby
3
star
43

grove

Experiments in verifying distributed systems with Iris
2
star
44

6.566-lab-2024

Python
2
star
45

new-students

Welcome for new PDOS students to get access to the organization
1
star