본문 바로가기

전체 글

(121)
운영체제 | CPU 스케줄링 알고리즘 | MLFQ 멀티 레벨 피드백 큐(MLFQ, Multi-level Feedback Queue) 우선순위 스케줄러의 발전된 형태 중 하나이며, Windows에서도 일부 채택되는 방식이다. (Linux는 현재 RB 트리를 활용하는 CFS(Completelty Fair Scheduler)를 사용한다고 한다.) MLFQ의 목표 두 가지 1. 반환 시간 최적화: 짧은 작업을 먼저 실행시킨다 2. 응답 시간 최적화: 대화형 사용자에게 응답이 빠른 시스템이라는 느낌 주기 근데 시스템은 작업의 실행 시간을 미리 알 수 없다. 따라서 핵심적인 질문은 다음과 같다: 작업의 실행 시간에 대한 선행 정보 없이 어떻게 위 목표를 달성할 수 있는가? MLFQ의 규칙 MLFQ는 여러 개의 큐로 구성되며, 각각 다른 우선순위(Priority l..
운영체제 | CPU 스케줄링 알고리즘 | RR, SJF, STCF 협조적이든 비협조적이든 프로세스(쓰레드) 전환을 한다고 쳐. 그럼 지금 실행 중인 애는 ready list에 가겠지? 아니면 I/O 인터럽트로 blocked가 된다고 쳐. 이제 그 다음에 실행할 녀석을 어떻게 고르냐가 문제임. 무조건 ready list에 들어온대로 처리할까? 그것도 초기에 쓰였던 방법 중 하나임. FIFO 또는 FCFS(First Come First Serve)라고 불리는 방식. 이런 걸 스케줄링 알고리즘이라고 함. 어떻게 스케줄링을 할지에 대한 이야기. 스케줄링 평가 기준: 평균 반환시간 스케줄링의 평가 항목: 어떤 스케줄링 알고리즘이 얼마나 좋은지를 어떻게 평가할까? 기준은 두가지임. 1. 반환 시간(turnaround time): 작업 완료시간 - 시작시간 (대략 작업 리스트에 ..
운영체제 | 프로세스, 쓰레드의 상태와 생애주기
운영체제 | 프로세스(Process), 쓰레드(Thread) 프로세스, 쓰레드가 뭔가요? 프로세스: 프로세스는 실행 중인 프로그램의 인스턴스로, 독립적인 메모리 공간(가상 메모리)와 자원(파일 핸들, 네트워크 연결 등)을 가진다. OS가 프로세스의 생성 및 관리를 맡는다. 쓰레드: 쓰레드는 프로세스 내의 실행 흐름 단위로, 상위 프로세스의 자원과 메모리(코드, 데이터, 힙)를 공유한다. 각 쓰레드는 독립적인 스택 공간을 가지며, 멀티쓰레딩을 통해 프로세스 내에서 여러 작업을 동시에 수행할 수 있다. 프로세스(Process) 프로세스는 실행 중인 프로그램의 인스턴스라는 말은 다음과 같이 비유할 수 있다. 보조기억장치의 프로그램 실행 파일 = 설계도 보조기억장치의 실행 파일은 프로그램의 코드와 데이터를 포함하고 있다. 이 파일은 프로그램이 어떻게 동작해야 하는지에 대..
PintOS | Project1. Threads | 과제 소개 PintOS 프로젝트는 매우 방대하다... 과제 설명서만 해도 몇 페이지지?? 하여간 엄청나게 많은 분량이다. 그래서 과제설명서 중 핵심 내용을 따로 모아놔야 할 것 같다. 앞서간 정글 선배님들 덕분에 한글 번역본을 구할 수 있었다.👍👍 감사합니다 잘 써먹겠습니다....! 테스트 방법 /PintOS_lab/threads/build 디렉토리에서 컴파일 및 채점을 실행한다. 전체를 컴파일하고 테스트하려면 make -> make check 여러 테스트 케이스들을 개별적으로 테스트하려면 예를 들어 alarm-multiple 이라는 테스트케이스를 수행하고 싶다면 make tests/threads/alarm-multiple.result 이 명령은 alarm-multiple 테스트를 수행하고, 결과를 .result ..
Week 6. Proxy Lab 주차 회고 정글에서 네트워크에만 집중할 수 있는 유일한 주차가 지나갔다. 네트워크 지식 기반이 없기도 하고, 네트워크에만 집중할 기회이다 보니까 이번주는 평소보다 이론 공부에 더 욕심을 냈던 것 같다. 그래서 구현 과제를 정말 최소한만 했다는 점은 아쉽다 ㅠ 그래도 어느정도 이론적 기반은 생긴 것 같은데, 숭숭 뚫려있는 빈 구멍들은 훗날 더 채워나가보는 걸로! 이번주부터는 대망의 PintOS 기간이다. 정글에 오기 전, 정글 커리큘럼에서 가장 눈에 띄었던 프로젝트이다. 스탠포드에서 만들고, 카이스트에서도 핵심 과목의 핵심 과제라고 하길래 정말 기대가 컸다. 하지만 당장 눈앞에 닥친 지금은..? '이걸 내가 할 수 있을까...?😂' 라는 불안이 큰 것 같다ㅎㅎ 더군다나 이번주 팀은 그대로 3주간 쭉 유지되는데, 유일..
네트워크 모델 | (6) TCP/IP 데이터 흐름 더 깊게 이해하기 (feat. Buffered I/O) 앞에서(네트워크 모델 | (5) 데이터 단위와 흐름 이해하기) TCP 통신에서의 데이터 흐름에 대한 큰 그림을 그려보고, 각 단계별 데이터를 뭐라고 부르는지 알아보는 시간을 가졌었다. 이번에는 이 큰 그림의 세부내용을 구체화해보는 시간을 가져보자. 데이터가 계층을 넘나드는 과정을 디테일하게 그리려면, 우선 Buffered I/O가 무엇인지 알아야 한다. Buffered I/O Buffered I/O는 데이터를 메모리의 버퍼에 임시로 저장하고, 버퍼가 가득 차거나 빌 때까지 기다린 후 데이터를 전송하는 방식이다. 애플리케이션 계층에서 TCP가 있는 전송 계층으로, 그리고 다시 네트워크 계층으로.. 이렇게 데이터를 내려줄 때 버퍼를 사용하여 데이터를 전송하고 수신한다. 잠시 버퍼에 담아두고, 살짝 마사지 해..
네트워크 프로그래밍 | Proxy Lab | echo 서버 구현 (소켓 프로그래밍 공부) echo 서버 - 전체 작동 구조도 server 파일 분석 echoserveri.c 전체 코드 중간중간에 혼자 테스트할 목적으로 쓴 printf가 있으니, 그냥 무시하면 된당 #include "csapp.h" // echo: 클라이언트 요청을 처리함 void echo(int connfd); // main: 서버 프로그램의 entry point int main(int argc, char **argv) { // 리스닝 및 연결용 파일 디스크립터 선언 int listenfd, connfd; socklen_t clientlen; struct sockaddr_storage clientaddr; /* 모든 주소를 위한 충분한 공간 */ char client_hostname[MAXLINE], client_port[M..