분류 전체보기
-
[Pintos] 4.4BSD 스케줄러(4.4BSD Scheduler) - niceness, priority, recent_cpu, load_avg, fixed-point real arithmetic프로젝트/Pintos 2021. 4. 3. 13:57
멀티스레드 프로그램에서는 구조가 상이한 여러 스레드들이 함께 존재한다. 어떤 스레드는 다수의 I/O 요청을 처리하지만 복잡한 연산 작업은 없을 수 있으며, 어떤 스레드는 I/O 요청 없이 다수의 복잡한 연산 작업 만으로 이루어져 있을 수 있다. 위의 첫 번째 스레드는 I/O 장비와의 빠른 반응속도를 필요로 하지만 CPU time 은 거의 필요하지 않지만, 뒤의 스레드는 반대이다. 이렇게 다양한 스레드들이 존재하기 때문에, 효율적인 프로그램을 위해서 Scheduler(스케줄러) 는 이러한 요구들이 최대한 효율적으로 사용되도록 배치해야 한다. 이를 위해 스케줄러는 priority 라는 속성을 관리하는데, 이 속성에 기반하여 스레드들의 처리 순서를 결정한다. 이 포스트에서는 4.4BSD Scheduler 스케..
-
[Pintos] 동기화(Synchronization) - Semaphores, Locks, Monitors, Optimization Barriers프로젝트/Pintos 2021. 3. 31. 11:37
스레드(Thread) 쓰레드는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 환경에 따라 하나의 프로세스 내에서 두 개 이상의 쓰레드가 실행될 수 있는데 이를 멀티스레드(multithread) 라고 한다. 멀티 쓰레드는 멀티 프로세스와 여러 작업이 동시에 이루어 진다는 공통점이 있지만, 멀티 프로세스에서 각 프로세스는 독립적으로 실행되며 각 프로세스는 별개의 메모리 공간을 차지하는 반면 멀티 스레드는 프로세스 내의 메모리를 공유하여 사용할 수 있다는 차이점이 존재하며 이러한 자원을 공유하는 특성 때문에 pintos 의 스레드 설계는 스레드간의 동기화(Synchronization) 에 신경을 써야한다. 이 포스트는 pintos 의 동기화에 사용될 수 있는 여러 방법들을 소개한다. Disabling Int..
-
[Pintos] 로딩 (Loading) - Loader, Real mode, Protected mode, A20 gate, Page Table프로젝트/Pintos 2021. 3. 19. 13:48
로딩 로딩은 Pintos 의 Loader 의 실행과 kernel initialization 작업을 포함한다. 1. Loader 여기서 로딩은 pintos 의 첫 실행시 진행되는 부팅의 과정을 나타낸다. 부팅이란 컴퓨터가 구동하여 기초적인 초기화 작업을 수행하고 운영 체제를 읽어오는 일련의 작업을 말한다. 로더(Loader) 는 이러한 부팅의 작업을 진행하는 프로그램으로 장치(Disk) 의 첫 번째 트랙의 첫 번째 섹터에 저장되어 있다. Pintos 에서 로딩의 대략적인 순서는 아래와 같다. (로더의 코드는 에 구현되어 있다.) 1. BIOS 가 로더(Loader) 를 메모리에 로드(Load) 한다. BIOS 는 컴퓨터가 구동된 후 저장 장치의 첫 번째 섹터(Sector) 를 탐색하여 이 장치가 부팅 가능..
-
[Pintos] 디버깅 도구 (Debugging Tools) - printf, assert, __attributes__, backtraces프로젝트/Pintos 2021. 3. 16. 10:56
디버깅이란 프로그램에서 발생할 수 있는 버그(에러) 를 찾아서 없애는 과정을 말한다. 이 장에서는 Pintos 프로젝트를 진행하면서 활용할 수 있는 여러가지 디버깅 도구들에 대해 설명한다. 여기서 설명된 방법들은 Pintos 프로젝트 뿐 아니라 다른 프로젝트들에서도 널리 사용될 수 있는 디버깅 방법들이므로 익혀두도록 하자. 1. printf() printf() 를 c 언어의 가장 처음에 배우기 때문에 printf() 를 사용한 디버깅은 없어보인다고 생각하기 쉽다. 하지만 printf() 만큼 간단하고 유용하게 사용할 수 있는 Debugging Tools 도 없다. 프로그램이 비정상적으로 작동할 때 printf() 를 코드의 중간중간 섞어 놓으면 문제가 발생한 코드의 범위를 특정할 수 있다. ex) cod..
-
[sftp] vscode 에서 서버 연결하기CS/기타 2021. 3. 1. 12:05
vscode 의 "sftp" 확장 프로그램을 쓰면 서버의 소스를 로컬에서 vscode로 편집할 수 있습니다. 저는 가상머신의 리눅스 환경에서 프로젝트를 진행하다가 vim 보다는 아무래도 vscode 가 익숙하여 로컬 vscode 에서 서버를 연결하여 사용하였고 그 방법을 공유하려고 합니다. *서버에 ssh 가 설치되어 있지 않아서 sftp 이용이 불가할 수 있으니 sudo dpkg -l | grep ssh 로 확인해보시고 없다면 sudo apt-get install ssh 로 ssh 를 먼저 설치해주셔야 합니다.* 1. SFTP 확장 프로그램 설치 vscode 에서 sftp 를 사용하기 위해 확장 프로그램을 설치하여야 합니다. - vscode 에서 왼쪽 메뉴의 저 테트리스 같은 모양을 누르면 확장 프로그..
-
[Vim]vim 기본설정 및 팁CS/기타 2020. 12. 10. 20:58
VIM(VI iMproved) : 리눅스 터미널 환경에서 사용가능한 대표적인 텍스트 편집기 vim 의 설정값은 .vimrc 파일을 수정함으로 변경할 수 있고, .vimrc 파일은 언제나 홈 디렉토리에 존재해야 한다. 1. .vimrc 파일 생성하기 cd ~ vim .vimrc 2. .vimrc 파일 설정하기 필자가 사용하는 개인 설정값을 아래 첨부합니다. 복사해가실 분은 아래 코드블럭을 사용해주시면 됩니다. if has("syntax") syntax on endif set autoindent set cindent set ts=4 set sts=4 set shiftwidth=4 set laststatus=2 set hlsearch set scrolloff=2 set showmatch set nocompat..
-
[알고리즘] 동적 계획법(Dynamic Programming) - 기본CS/Algorithms 2020. 12. 9. 21:24
동적 계획법(Dynamic Programming) 짧게 줄여서 DP 라고 부르는 이 알고리즘은 분할정복(Divide and Conquer) 알고리즘과 마찬가지로 복잡한 문제를 여러 개의 부분 문제들(Sub-problem) 으로 나누어 푼 후, 그 결과를 이용하여 복잡한 문제를 푸는 알고리즘이다. 다만 분할정복 알고리즘과의 차이는 DP 에서는 각 부분 문제들간에 겹치는 부분이 존재한다는 것인데, DP 는 이러한 겹치는 부분들을 메모이제이션(Memoization) 이라는 기법을 사용하여 단 한 번만 계산하도록 함으로써 알고리즘의 작동 시간을 줄이는 게 핵심입니다. 그렇다면 메모이제이션이라는 것은 무엇인지 알아봅시다. 피보나치 수열을 예로 들면, 아래와 같이 Fib(0) ~ Fib(3) 은 동일한 값을 구하는..
-
[웹서버] 라즈베리파이로 홈 서버 만들기CS/Server 2020. 10. 30. 11:04
안녕하세요 점점 날씨가 차가워지고 있네요. 오늘은 제가 집 어딘가 구석에 숨겨두었다가 어느날 이걸로 뭐 할 수 있는게 없을까? 해서 라즈베리 파이로 웹 서버를 만들게 된 이야기를 포스팅 해보려고 합니다. 마침 요즘 사이드 프로젝트로 책을 읽고 독후감을 쓸 수 있는 웹 사이트를 하나 만들고 있었는데 이 웹을 aws 같은 호스팅 서비스를 이용하지 않고 라즈베리파이를 이용해서 집에 직접 서버를 운영하기로 했습니다. 1. 웹 서버 설치하기 라즈베리 파이를 서버로 이용하기 위하여는 라즈베리 파이가 서버로서 동작할 수 있도록 웹 서버 소프트웨어를 설치해주어야 합니다. 일반적으로 많이 쓰이는 웹 서버 소프트웨어는 아파치(Apache), 엔진엑스(Nginx) 등이 있는데 라즈베리 파이라는 제한된 환경을 고려하여 아파치..