Saturday, June 29, 2024

CST334 Week 2 Report

Operating Systems Week 2 Summary

This week we learned a ton about processes and how the operating system manages them. The operating system virtualizes one or a few CPUs in order to run many processes concurrently. The operating system employs a combination of low level machinery and higher level scheduling policies to accomplish this. On the low level part, we have techniques such as context switches, which is utilized when changing the currently running process to a new one. We also see various system calls such as fork(), exec(), and wait(). In order to protect the system from any negatives a process may incur, we utilize limited direct execution - the process must run under limitations imposed by the operating system. While the process typically runs in user mode, the operating system by default runs in kernel mode, which means it has unlimited access to machine resources. 

We must combine low level machinery with higher level policies, or disciplines - this is while trying to simultaneously optimize for performance metrics such as turnaround time and response time. There are several approaches that can be considered, from shortest job first to round robin, in determining how to schedule processes. Ultimately, a more optimal approach is using a Multi-level feedback queue, or MLFQ. In this treatment, we have a number of distinct queues, each with a different priority level. The process with a higher priority level runs first in a round robin fashion with processes sharing its priority level, which means each process runs for a predetermined time slice, or scheduling quantum in alternating fashion with other processes. When each job's allotment is spent, its priority level is automatically decremented - this is so that more interactive processes can stay higher priority, while longer and more CPU intensive processes remain in the lower priority levels.

Wednesday, June 26, 2024

CTI: Personal Value Proposition (Beta Version)

 Dear Amazon and Google,

I heard that you are in need of a network engineer. I am here because I believe we can work together to produce a better level of stability and function in all areas of your workflow and in those which clients navigate in.

As a network engineer with five years experience having a notorious reputation for improving company network reliability, you can count on me to accomplish the following:

  • reduce network downtime by at least 50%
  • continually design new and improved implementations for local network
  • fully integrate within the current team and enhance group productivity

As leading companies within the software industry, you will benefit from the items I can bring to the table. I would like to speak with you on how we can begin improving our network strategies. 

Sincerely,

Luis

Monday, June 24, 2024

CST334 Week 1 Report

 Summary of Week 1

This week, we learned a ton in CST334. Most notably, we learned the basics of C and Linux Bash, as well as some introductory operating system concepts. I really enjoyed getting introduced to these concepts because they will help us see the overall picture of how operating systems work under the hood. For example, operating systems actually "trick" applications to think they have unlimited access to the CPU(s) and or memory by virtualizing the CPU and memory. To me, that is a genius invention and I am hyped to learn more about it. Furthermore, we will learn about concurrency and persistence, the other main branches of modern operating systems. 

Regarding C, it is a language very similar to C++, although it is slightly lower level, so we tend to work more closely with memory addresses - on top of C being considered a 'procedural' language rather than being object oriented. It makes sense for us to pair C with Linux in this regard. The Linux Bash is basically the terminal for Linux where we are able to manage files and run programs. We learned how to work with Docker to "contain" Linux and run Linux programs by way of the windows powershell, which was a blast. I really like how we can even debug programs with GDB.

Wednesday, June 5, 2024

CST 363 Week 8 Report

 Most Important Things Learned During CST 363: Introduction to Databases

  1. The most important thing learnt, if I had to choose, is how to work with SQL and MongoDB in Java. I really liked labs 19 and 21 for this, because we learnt quite a bit about how we can manage databases using Java. We were able to put everything together during these labs and really test our skills.
  2. The second most important thing I learned is how to write SQL queries, because this was the gateway into learning about databases. I think starting with SQL queries was a perfect way to get us to fundamentally understand how databases work. 
  3. The third most important thing I learned is how databases work beneath the surface. While theoretical knowledge like this may not be immediately practical, I think in the long term it will serve us well to at least be aware of how databases really work. I enjoyed learning the differences between relational and document databases, in particular.

CST 363 Week 7 Report

MySQL and MongoDB are both great programs one can use to manage databases.

Similarities: Both programs are open source and can also be installed on many different operating system such as Windows, Mac, and Linux. Both programs support indexing and large amounts of data, as well as sharding which can help to distribute data across many machines.

Differences: MySQL is technically a relational database, which means it is centered on tables, whereas MongoDB is NoSQL, document based. In MongoDB, data is stored in documents, specifically BSON files which are closely related to JSON format. MongoDB has a proprietary query language, whereas MySQL uses SQL, or structured query language. Furthermore, MongoDB does not use schemas, and each document can have a different structure, whereas MySQL relies heavily on schemas and every table must have a predefined schema structure.

When to choose MySQL: MySQL should be chosen whenever we require structured data and very reliable, consistent transactional integrity. Another indicator for MySQL is when we require complicated queries and joins. Some applications could be those that work with e-commerce and web apps.

When to choose MongoDB: MongoDB should be selected as our program when there is a need to store large volumes of unstructured data. Another good indicator would be if we require flexible schemas and fast, plentiful write transactions. Some applications could be those that work with real time analytics.