diff --git a/README.md b/README.md index 5f9982a..af7f855 100644 --- a/README.md +++ b/README.md @@ -2,56 +2,56 @@ ## Table of Contents -* [Introduction]() -* [Theoretical Concepts]() - * [Unikernel]() - * [Microkernel]() - * [Monolithic vs Microkernel]() - * [Library Operating Systems]() - * [Unikernel]() - * [Hypervisors VS Linux Containers VS Unikernel]() - * [Security in Unikernel]() - * [Immutable Infrastructures]() -* [State of the Art]() - * [Existing Projects]() - * [MiniOS]() - * [ClickOS]() - * [HalVM]() - * [IncludeOS]() - * [MirageOS]() - * [OSv]() - * [Rumprun]() - * [Unik]() - * [Clive]() - * [Drawbridge]() - * [GUK]() - * [LING]() - * [Runtime.js]() - * [Comparing Solutions]() -* [Use Case]() -* [Proof of Concept]() - * [Choice of Unikernel Solution]() - * [Architecture of the Proof of Concept]() - * [Creating the Unikernel Proof of Concept]() - * [IncludeOS build files in more details]() - * [Creating the Container Counterpart]() - * [Early Comparison]() - * [Resource Minimization]() -* [Benchmark & Results]() - * [Benchmark Environment]() - * [Benchmarking Methodology]() - * [Benchmarking tools used]() - * [Benchmark Results]() - * [DNS Server]() - * [Web Server]() - * [Boot Time]() - * [Benchmark Analysis]() -* [Project's Reproducibility]() - * [Deployment Scripts]() - * [Benchmarking Scripts]() - * [Improvements]() -* [Conclusion]() -* [Bibliography]() +* [Introduction](https://github.com/cetic/unikernels#introduction) +* [Theoretical Concepts](https://github.com/cetic/unikernels#theoretical-concepts) + * [Unikernel](https://github.com/cetic/unikernels#unikernel) + * [Microkernel](https://github.com/cetic/unikernels#microkernel) + * [Monolithic vs Microkernel](https://github.com/cetic/unikernels#monolithic-vs-microkernel) + * [Library Operating Systems](https://github.com/cetic/unikernels#library-operating-systems) + * [Unikernel](https://github.com/cetic/unikernels#unikernel-1) + * [Hypervisors VS Linux Containers VS Unikernel](https://github.com/cetic/unikernels#hypervisors-vs-linux-containers-vs-unikernel) + * [Security in Unikernel](https://github.com/cetic/unikernels#security-in-unikernel) + * [Immutable Infrastructures](https://github.com/cetic/unikernels#immutable-infrastructures) +* [State of the Art](https://github.com/cetic/unikernels#state-of-the-art) + * [Existing Projects](https://github.com/cetic/unikernels#existing-projects) + * [MiniOS](https://github.com/cetic/unikernels#minios) + * [ClickOS](https://github.com/cetic/unikernels#clickos) + * [HalVM](https://github.com/cetic/unikernels#halvm) + * [IncludeOS](https://github.com/cetic/unikernels#includeos) + * [MirageOS](https://github.com/cetic/unikernels#mirageos) + * [OSv](https://github.com/cetic/unikernels#osv) + * [Rumprun](https://github.com/cetic/unikernels#rumprun) + * [Unik](https://github.com/cetic/unikernels#unik) + * [Clive](https://github.com/cetic/unikernels#clive) + * [Drawbridge](https://github.com/cetic/unikernels#drawbridge) + * [GUK](https://github.com/cetic/unikernels#guk) + * [LING](https://github.com/cetic/unikernels#ling) + * [Runtime.js](https://github.com/cetic/unikernels#runtimejs) + * [Comparing Solutions](https://github.com/cetic/unikernels#comparing-solutions) +* [Use Case](https://github.com/cetic/unikernels#use-case) +* [Proof of Concept](https://github.com/cetic/unikernels#proof-of-concept) + * [Choice of Unikernel Solution](https://github.com/cetic/unikernels#choice-of-unikernel-solution) + * [Architecture of the Proof of Concept](https://github.com/cetic/unikernels#architecture-of-the-proof-of-concept) + * [Creating the Unikernel Proof of Concept](https://github.com/cetic/unikernels#creating-the-unikernel-proof-of-concept) + * [IncludeOS build files in more details](https://github.com/cetic/unikernels#includeos-build-files-in-more-details) + * [Creating the Container Counterpart](https://github.com/cetic/unikernels#creating-the-container-counterpart) + * [Early Comparison](https://github.com/cetic/unikernels#early-comparison) + * [Resource Minimization](https://github.com/cetic/unikernels#resource-minimization) +* [Benchmark & Results](https://github.com/cetic/unikernels#benchmarking--results) + * [Benchmark Environment](https://github.com/cetic/unikernels#benchmark-environment) + * [Benchmarking Methodology](https://github.com/cetic/unikernels#benchmarking-methodology) + * [Benchmarking tools used](https://github.com/cetic/unikernels#benchmarking-tools-used) + * [Benchmark Results](https://github.com/cetic/unikernels#benchmark-results) + * [DNS Server](https://github.com/cetic/unikernels#dns-server) + * [Web Server](https://github.com/cetic/unikernels#web-server) + * [Boot Time](https://github.com/cetic/unikernels#boot-time) + * [Benchmark Analysis](https://github.com/cetic/unikernels#benchmark-analysis) +* [Project's Reproducibility](https://github.com/cetic/unikernels#projects-reproducibility) + * [Deployment Scripts](https://github.com/cetic/unikernels#deployment-scripts) + * [Benchmarking Scripts](https://github.com/cetic/unikernels#benchmarking-scripts) + * [Improvements](https://github.com/cetic/unikernels#improvements) +* [Conclusion](https://github.com/cetic/unikernels#conclusion) +* [Bibliography](https://github.com/cetic/unikernels#bibliography) ## Introduction @@ -114,7 +114,7 @@ The application code in the user space relies on the operating system code in th Unikernel applications, however, present a very different structure. As indicated by Figure 2, an application running in a unikernel does not present any division in its address space, which holds both the high-level application code and the lower level operating system routines. -![Application stack on a unikernel application](hhttps://raw.githubusercontent.com/cetic/unikernels/master/MEDIA/unikernel_application_stack.PNG "Application stack on a unikernel application. Source: (Pavlicek, 2017)") +![Application stack on a unikernel application](https://raw.githubusercontent.com/cetic/unikernels/master/MEDIA/unikernel_application_stack.PNG "Application stack on a unikernel application. Source: (Pavlicek, 2017)") *Figure 2 Application stack on a unikernel application. Source: (Pavlicek, 2017)* @@ -274,7 +274,7 @@ Once both infrastructures have been developed and are stable, a benchmark will b ## Proof of Concept -As highlighted by the table in [Comparing Solutions](), numerous options are available depending on the programming language used for an application as well as the desired supporting platforms. Unfortunately, not all platforms are supported for all languages. +As highlighted by the table in [Comparing Solutions](https://github.com/cetic/unikernels#comparing-solutions), numerous options are available depending on the programming language used for an application as well as the desired supporting platforms. Unfortunately, not all platforms are supported for all languages. ### Choice of Unikernel Solution