6. Virtualization) Multi-level Feedback
·
운영체제/Operating Systems in Three Easy Pieces
Multi-level Feed-back Queue (MLFQ)는 두가지 문제를 개선하려 한다. 1. turnaround time 최적화 SJF또는 STCF가 프로세스의 실행시간과 같은 지식을 필요로 했던 것과 달리, 이러한 지식이 없는 상태에서 최적화를 해야한다. 2. response time 최소화 interactive유저들에게 반응적이어야한다. round robin은 response time을 줄였지만 turnaround time에서는 좋지 않았다. 즉, job의 길이에 대한 사전지식 없이 response time을 최소화 하는 동시에 turnaround time 또한 줄일 수 있는 스케줄러를 설계해야한다. MLFQ : Basic Rules OS마다 MLFQ에 대한 구현은 다 다르지만 알고리즘은 비슷..
5. Virtualization) CPU Scheduling
·
운영체제/Operating Systems in Three Easy Pieces
이전에 process를 virtualization하기 위해서는 low-level machinery mechanism과 high-level intelligence가 필요하다 했고, 앞선 글에서 context switch등 low-level mechanism들에 대해서 알아보았다. 이제는 OS Scheduler를 위한 scheduling policies 혹은 disciplines를 알아보자. 우리는 scheduling policies를 점차적으로 개선해나가며 공부할 것이다. 하지만 스케줄링 정책을 만드는 것에 있어서 workload는 굉장히 중요한 부분이고 원활한 예시를 위해 몇가지 가정을 둘것이다. (물론 실제로 이 가정은 매우매우 비현실적이지만 공부를 위한것이다..) Workload Assumptions..
4. Virtualization) Direct Execution
·
운영체제/Operating Systems in Three Easy Pieces
앞서, CPU를 virtualize하기 위해서는 OS가 동시에 동작하는 것처럼 보이는 프로그램들에게 물리적인 CPU를 공유해야한다고 설명했다.기본 아이디어는 한 프로세스를 잠시 실행했다, 다른 프로세스를 실행하고, 또 다른 프로세스를 돌아가며 실행하는 것이다.이걸 CPU의 time sharing이라고 한다. 하지만 time sharing에는 몇가지 문제들이 있다.1. Performance과도한 오버헤드 없이 좋은 성능을 유지하며 time sharing을 할 수 있을 것인가.2. Control어떻게 cpu를 컨트롤하며 효율적으로 프로세스들을 실행할 수 있을 것인가. Basic Technique : Limited Direct Execution프로그램을 빠르게 실행하기 위해서 OS는 limited direct..
3. Virtualization) Processes API
·
운영체제/Operating Systems in Three Easy Pieces
앞서 2번글에서 OS가 프로세스를 위한 인터페이스를 제공한다고 했다. 이번 글에서는 OS가 process API를 어떻게 제공하는지 실제로 코드를 알아보자. 코딩은 UNIX가 제공하는 시스템으로 진행 할 것이다. The fork() System Call fork()는 새로운 process를 생성하는 시스템 콜이다. fork() 시스템 콜을 호출하면 새로운 프로세스를 생성하고, fork()를 호출한 프로세스를 부모 프로세스, 새로 생성된 프로세스를 자식 프로세스라고 한다. 프로세스는 각 프로세스를 식별하기 위해 id를 가지고 있는데, 이를 PID라고 한다. fork()를 통해 프로세스 생성에 성공 했을 때 새로 생성된 자식 프로세스에는 0을 반환하고, 부모 프로세스에는 자식 프로세스의 pid를 반환한다. ..
2. Virtualization) Processes
·
운영체제/Operating Systems in Three Easy Pieces
Process는 무엇일까?프로세스는 OS가 제공하는 추상적인 개념으로, 실행중인 프로그램을 말한다.프로세스와 프로그램을 혼동할 수 있지만 프로그램은 그 자체적으로 생명이 없는 것이다.즉, 디스크에 들어있는 명령어 덩어리에 불과하다. 이를 가져다가 변환하고 실행하는 것은 os가 하는일이다. os가 이런 프로세스를 관리해주기 때문에 우리는 프로그램을 실행할 때 cpu가 사용가능한지 고려하지 않고,그냥 프로그램을 실행할 수 있는것이다. 그렇다면 물리적인 cpu가 몇개 없음에도 불구하고 어떻게 OS는 무한대의 CPU를 가진 것같은 착각을 줄 수 있는것일까? 이는 OS가 CPU를 virtualization, 가상화하기 때문이다.이전 복숭아의 예시와 같이, 한 프로세스를 실행하고 멈추고 다른 프로세스를 실행하면서 ..
1. Virtualization) dialogue
·
운영체제/Operating Systems in Three Easy Pieces
운영체제에서 Virtualization, 즉 "가상화"란 무엇일까? 쉽게 예를 들자면, 복숭아 한개를 가지고 있다고 생각해보자. 하지만 복숭아를 먹고 싶어하는 사람은 여러명이고 모두가 만족하기 위해서는 각자 복숭아를 가지고 있어야 한다. 이를 해결하기 위해서 물리적인 복숭아 한개에서 가상의 복숭아 여러개를 만들어 내는 것이다. 이게 어떻게 가능할까? 사람들은 대부분의 시간을 자거나 다른 일을 하며 보낸다. 이 시간동안 복숭아를 뺏어서 필요한 다른 사람에게 넘겨준다면, 가상의 복숭아 여러개가 있는 것 같은 착각을 만들어 낼 수 있다.(실제로 우리가 갖고 있는건 복숭아 한개 뿐이다!) 이 상황을 CPU에 적용해보면, 물리적인 CPU가 한개 있을때 Virtualization을 통해 실행중인 애플리케이션들이 각..
Operating Systems in Three EasyPieces 책을 통해 운영체제를 공부하며
·
운영체제/Operating Systems in Three Easy Pieces
https://pages.cs.wisc.edu/~remzi/OSTEP/ 위 사이트에 공유되어 있는 Operating Systems in Three EasyPieces 책을 통해 운영체제를 공부하고자 함. 또한 원어로 되어있는 책을 통해 학습함으로써 영어에 대한 친근감을 형성할 수 있을 것으로 기대됨. 포스팅은 주로 해당 목차의 요약을 올릴 예정.
[JAVA] Stack이란?
·
자료구조&알고리즘
Stack이란? Stack은 LIFO(Last-in, First-out) 의 특성을 가지고 있는 자료구조이다. 즉, 나중에 들어온 것이 먼저 나가는, 바닥부터 차곡차곡 쌓고 제일 위를 꺼내는 특성을 가지고 있다! Stack의 시간 복잡도는 다음과 같다. 삽입(push) O(1) 삭제(pop) O(1) 읽기(peek) O(1) 탐색(search) O(n) Java로 코테에서 Stack 활용하기 java에서는 Stack클래스를 제공하고 있다. 하지만 오라클 공식 문서에 따르면 Stack 클래스 보다는 ArrayDeque를 활용하는 것을 추천한다. (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayDeque.html) Th..
[My SQL] mysqld_safe A mysqld process already exists 오류 (ERROR! The server quit without updating PID file)
·
Backend/Database
$mysql.server start My SQL을 성공적으로 설치하고 실행하려는데 다음과 같은 오류가 발생했다. mysqld_safe A mysqld process already exists mysql.server stop 그래서 서버를 종료 시켜 주려 하니... ERROR! The server quit without updating PID file 이번엔 이런 오류가 발생했다. 그래서 구글에 해당 오류를 검색해 나오는 대부분의 방법 chmod로 권한도 줘보고 , killall mysql 도 해봤지만 ps aux|grep mysql 을 실행했을때 계속해서 mysql이 실행되고 있는게 잡혔었다. 해결 방법 My SQL 서버를 실행하는데는 2가지 방법이 있다. 1. mysql로 실행하기 $mysql.serv..
[MySQL] Mac 맥 MySQL 재설치 하기 / password 변경 (brew uninstall mysql)
·
Backend/Database
My SQL 패스워드를 까먹었다,, 구글에 나온 온갖 방법들 mysql.server start --skip-grant-tables 등등 을 시도해봤지만 권한이 없어서 실패했고, 권한을 주려하니 다시 패스워드가 필요한 무한 반복의 상황을 겪은 후 My SQL을 재설치하기로 했다! 하지만, brew uninstall mysql 후 brew install mysql 로 재설치 했는데도 패스워드가 초기화 되지 않았다. → 캐시에 기존 mysql 과 관련된 파일이 남아있는것을 확인 그래서 제대로 삭제해 보자! 1. brew uninstall mysql $brew list → brew로 깔린 것들 체크 $brew uninstall mysql → mysql과 관련된 것들은 uninstall로 다 제거해준다 2. /u..