The thrill of getting out of my comfort zone

Remember a moment in your life in which you could feel your pulse pound uncontrollably? Remember the feeling of accomplishment and empowerment when this moment has passed? The adrenaline, the raw, uncontrollable emotion, and subsequent realization of the feat you have just achieved? How much time has passed since the last time you have felt this way? For me, too much. This emotions, are tightly knit with getting out of one’s comfort zone.
Read more

Looking for my vocation

During these months, I’ve been able to think deep in the development of my professional career. I’ve come to perceive subtle, unimportant behaviors, comments, interests, that, mixed together, drew a approximate career path for me. Up until now, I had been following the path of the student, centered in the immediate future, but when I finished my degree, I felt lost. I didn’t know where to go, what I liked in the software development world.
Read more

The effect of winter in my psyche

During the last several months, I have been unemployed. Aside from the immediately obvious, which is, not getting payed, and having to move back to my parents home as a consequence, I set myself on a path of self-discovery. I was able to identify that I wasn’t happy at my previous job, and that I had been in this state for a year. To this realization, I promised myself to learn from my mistakes, and prioritize my mental health to short-term rewards, such as a paycheck at the end of the month.
Read more

Operating Systems - Structure

Below are some notes on Operating Systems Structure from the book Modern Operating Systems. Different approaches suit different intended usages, below is a list of the most common structures and their explanation. Monolithic systems Layered systems Microkernels Client-server systems Virtual Machines Exokernels Monolithic Systems The entire OS runs as a single program in Kernel Mode. There is no privacy, as every procedure is visible to every other procedure.
Read more

Operating Systems - Interrupts

Once I have created a Kernel with subsequent print() methods and the GDT, my next step in creating a OS is to implement Interrupts. We are going to enable Interrupts and write a keyboard interrupt handler for my learning-purposes OS called Rose-OS. This document is a resume of this OSDEV wiki article, this osdever article and the Intel i386 processor manual. But, What are Interrupts? Interrupts are signals from a devices to the CPU.
Read more

C++ Concurrency and Utilities

I have been reading Bjarne Stroustrup’s “A tour of C++” recently and wanted to make notes on it’s last section: Concurrency and utilities Below are my notes. Resource Management It is important that a program doesn’t leak resources. This may cause security vulnerabilities, as much as program efficiency drop by orders of magnitude. To ensure resources are correctly used, we can handle them using the RAII (Resource Aquisition Is Initialization) technique.
Read more

C++ Container Mechanisms

Below are my notes on section 3 of “A tour of C++” Libraries The C++ standard library provides several facilities to the programmer, in order to simplify the given task. These include: Basic Runtime Language Support C standard Library Strings and I/O streams Framework of containers Support for numerical computation Support for REGEX matching Support for Concurrent processing Utilities to sopport template metaprorgamming Smart pointers Special-purpose containers Strings String concatenation is efficient given it has a move operator.
Read more

C++ Abstraction Mechanisms

I have been reading Bjarne Stroustrup’s “A tour of C++” recently and wanted to make notes on the different types of abstraction mechanisms available to the programmer. Below are my notes. Concrete Classes The basic idea of Concrete Classes is that they behave just like built-in types. It’s representation is part of it’s definition. This allows implementations to be optimally efficient in time and space. It defines the behavior of it’s member functions in full.
Read more

OSTEP - Scheduling Introduction

Scheduling is the policy we use to arrange the processes the CPU has to run and when. In this post, we are going to look into some basic scheduling techniques examples. Workload assumptions We are going to set a series of assumptions about the processes running in the system: Each job runs for the same amount of time All jobs arrive at the same time Once started, each job runs to completion All jobs only run on CPU (No I/O) The runtime of each job is known Scheduling metrics We are going to use these metrics to compare the different scheduling techniques.
Read more

OSTEP - Mechanisms Limited Direct Execution

There are many problems associated with virtualizing a CPU. The most important problem we have to solve is that we need to maintain control of the processes running, so they don’t take over the system. Other problems such as the need to switch environments and resources for every different process the CPU works on, also impact CPU efficiency. Basic Technique: Limited Direct Execution Direct execution: The Operating System provides access to the CPU directly to each process.
Read more