전체 글 261

PintOS Project 1.1 - Alarm clock (정글사관학교 56일차 TIL)

대망의 핀토스 프로젝트가 시작됐다. 오늘은 시작한지 5일차. 운영체제 이론 공부(~데드락)를 마치고 과제를 보니까 이건 뭐 또다른 신세계.. 하지만 조급해하지 않고 차근차근 공부해보자. 과제 설명부터 보겠다. (과제 링크는 여기) Reimplement timer_sleep(), defined in devices/timer.c. 현재 코드는 작동하나, 지금 코드는 busy-wait 방식이다. 이는 현재 시간(tick)을 계속 체크한 뒤, 충분한 시간이 지나기 전까지 계속해서 thread_yield() 함수를 호출하는 루프를 돈다. 이러한 busy waiting을 피하기 위해 코드를 다시 짜라. 쓰레드 호출을 최소한 x 시간이 지난 후에 진행할 수 있도록 지연해라. 만약 시스템이 idle 상태가 아니라면, ..

운영체제 (3) - 프로세스, 스레드 (정글사관학교 55일차 TIL)

동기식 입출력 / 비동기식 입출력 프로세스가 입출력 요청 → 입출력 처리를 운영체제가 하니 사용자가 운체한테 요청. 동기식 입출력: I/O 요청 후 입출력 작업 완료된 후에 제어가 사용자 프로그램에게 넘어감. 구현 1 I/O가 끝날 때까지 CPU 낭비 매시점 하나의 I/O만 일어날 수 있음. 구현 2 I/O가 완료될 떄까지 해당 프로그램에게서 CPU 뺏음. I/O 처리 기다리는 줄에 그 프로그램을 줄세움 ready 상태인 다른 프로그램(프로세스)에게 CPU를 준다 (이것도 동기식이라는 거 주의!) 현재 수업에서 얘기하고 있는 입출력 방식은 동기식 - 구현 2! (비동기식이 아님!) 비동기식 입출력: I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감. ⇒ 두..

운영체제 (2) - 프로세스 (정글사관학교 54일차 TIL)

프로세스 프로세스 개념 프로세스란 "실행 상태의 프로그램"을 의미한다. 여기서 프로그램이 실행 중이라는 의미는 디스크에 있던 프로그램을 메모리에 적재하여 운영체제가 다룰 수 있는 상태가 되었다는 것을 뜻한다. 즉, 메모리 내에 자신을 위한 주소 공간이 있음을 의미한다. 운영체제는 이를 가상 메모리로 관리해 각 프로세스마다 독립적으로 메모리를 할당해준다. 프로세스의 문맥(context) 프로세스에서 문맥이란 굉장히 중요한 개념이다. 앞으로 나올 운영체제의 작동 방식을 이해하는데 있어 필수적으로 이해해야 한다. 일반적으로 문맥이라는 단어의 뜻을 우리는 "글의 맥락, 글의 흐름"이라고 해석한다. 이를 컴퓨터에서는 "프로세스가 현재 시점을 기준으로 수행 완료한 상태"를 말한다. 즉, 이 프로세스가 1에서 10까..

운영체제(1) - 시스템 구조/프로그램 실행 (정글사관학교 53일차 TIL)

1. 운영체제 운영체제란 무엇인가? 운영체제란, 사용자 및 다른 모든 소프트웨어, 하드웨어를 연결하는 소프트웨어 계층으로, 컴퓨터 계층구조 상에서 하드웨어 바로 위에 올라와있다. 좁은 의미로는 커널(운영체제 중 메모리에 상주하고 있는 핵심 부분)만을 말하고(이는 보통 전공자 입장에서 해당), 넓은 범위로는 커널 뿐만 아니라 각종 주변 시스템 유틸까지 포함한다. 운영체제를 쓰는 목적 1. 하드웨어, 즉 시스템 자원 (CPU, 메모리, 기억장치, 입출력 장치 등)을 효율적으로 관리 여기서 효율성이란, 하드웨어라는 유한한 자원은 이미 주어져있고 세팅된 상황에서는 변경되지 않는데 이 자원을 가지고서 최대한 성능을 낼 수 있도록 하는 관점을 말한다.한 가지 예로 CPU의 경우, 실행 중인 프로그램들에게 짧은 시간..

정글사관학교 52일차 TIL: tiny 서버 구현, string 관련 함수 정리

1. tiny 서버 구현 Tiny main() 루틴 타이니는 포트로부터 오는 반복적으로 연결 요청을 듣기 수행하는 서버. Open_listenfd() 함수를 호출해 듣기 소켓을 오픈한 다음, 무한한 서버 루프를 실행 ⇒ 반복적으로 accept() 을 실행해 연결을 받고, 트랜잭션을 수행한 뒤, 연결을 닫아. doit 함수 doit 함수는 HTTP 트랜잭션을 다룬다. 요청라인을 읽고 parsing. 이때, rio_readlineb 함수를 이용해 request line을 읽는다. *rio_readinitb, rio_readlineb 텍스트 라인 전체를 내부 읽기 버퍼에서 복사하는 rio_readlineb와 텍스트 라인과 바이너리 데이터 모두를 읽을 수 있는 rio_readnb 파일 → 읽기 버퍼 → (읽기 ..

정글사관학교 51일차 TIL: 프록시, mmap()과 malloc() 차이 정리

1. 프록시 1. 프록시(proxy)란 무엇인가 클라이언트와 서버 사이에 위치해 중계기로서 통신을 수행하는 역할. 클라이언트가 직접적으로 end server와 연결하여 리소스를 얻는 게 아니라 프록시라는 중간 경로를 통해 통신 수행 프록시는 클아이언트로부터 받은 요청을 엔드 서버에게 보내 응답을 받은 뒤, 해당 응답을 클라이언트에게 보낸다. 프록시 종류 Forward proxy Reverse proxy 1. Forward proxy 보통 우리가 부르는 proxy: forward proxy. 클라이언트가 서버로 요청할 때 직접 요청하지 않고 먼저 프록시 서버를 통해 요청하는 방식. Forward 프록시 특징: 클라이언트가 요청한 내용을 캐싱(caching)해준다. 캐싱: 이전에 요청해서 얻은 리소스를 저장..

정글사관학교 50일차 TIL: 웹서버 개념 정리

웹서버 1. Web Basics 클라이언트와 서버는 텍스트 베이스인 HTTP로 통신함. HTTP: 매우 단순. 클라이언트는 서버와 인터넷 연결을 open하고 콘텐츠를 요청한다. 서버는 요청받은 콘텐츠에 대해 응답하고 연결을 종료한다. 브라우저는 콘텐츠를 읽고 화면에 띄운다. FTP와 HTTP와의 차이? 가장 큰 차이는 웹 콘텐츠가 HTML 언어로 쓰여진다는 점. HTML 프로그램은 태그를 갖고 있는데, 이 태그는 브라우저에게 어떻게 다양한 텍스트와 그래픽 요소들을 페이지에 띄울 것인지 알려준다. 반면 FTP는 파일을 전송하는 프로토콜. 2. Web content 클라이언트와 서버에게 content란 MIME type을 지닌 바이트의 연속. MIME는 파일의 유형을 나타냄.(html, gif, png, j..

정글사관학교 49일차 TIL: 파일 디스크립터, 소켓 프로그래밍

파일 디스크립터(File descriptor) 파일 디스크립터란 운영체제가 특정 파일에 할당해준 정수값을 말한다. 컴퓨터 프로그래밍 시 운영체제가 파일에 접근하기 쉽게 번호로 추상화시켰다고 보면 된다. 예컨대 3학년 8반 5번 김철수라는 아이를 일일이 김철수라 부르지 않고 "3-8반 5번"으로 부른다고 생각하면 된다. 우리가 자주 사용하는 표준 입출력 역시 이미 파일 디스크립터 값이 할당되어 있는데, 값은 아래와 같다. stdin(표준입력): 0 stdout(표준출력): 1 stderr(표준에러): 2 위처럼 0-2까지는 이미 파일 디스크립터 값이 할당되어 있으니, 우리가 사용할 수 있는 건 3 이상부터다. 하지만 이 번호는 OS에서 알아서 매겨주기 때문에 신경 쓸 필요는 없다. 파일 디스크립터 값 할당..

정글사관학교 48일차 TIL: 웹브라우저 요청 흐름, HTTP

웹브라우저 요청 흐름(중요!) 면접 단골 질문이니 잘 정리해두자. 자, 구글에 접속해보자. 이제 면접관이 질문을 한다. 지금부터 구글에 "hello"를 검색할 거예요. 검색창이 뜨기까지, 컴퓨터에서는 무슨 일이 벌어지고 있는지 설명해주세요. 검색창에 hello를 적고 enter를 누르는 순간부터 시작한다. 1. HTTP 요청 메시지 생성 구글 창에서 입력을 받으면 웹브라우저는 URI를 위와 같이 변경하며, 이 URI를 parsing해 HTTP 요청 메시지를 생성한다. 이때 DNS를 조회해 해당 호스트 주소의 IP를 가져온다. 저 메시지 안에는 아래와 같은 내용이 들어있다. 검색한 내용을 조회하는 요청이니 GET 요청에 해당되며, 검색 내용(q=hello)과 언어(hl=ko), HTTP 버전, 그리고 호스..

정글사관학교 47일차 TIL: PORT, URI, 웹브라우저 요청 흐름(중요)

PORT 클라이언트가 동시에 여러 서버와 연결해야 하는 경우를 생각해보자. 예를 들어 내 컴퓨터에서 게임도 하고, 화상통화도 하며, 그 와중에 웹서핑까지 하면 어떻게 될까? 아래 이미지처럼 두 개의 서버가 필요하다고 할때, IP만으로는 한 서버에서 게임/화상통화 요청시 응답오는 패킷을 구별할 수 없다. (둘다 200.200.200.2) 우리가 이전 공부 자료에서 봤던 것처럼, TCP/IP 패킷에서는 PORT라고 하는 글자를 본 적이 있을 것이다. 이것이 바로 이러한 상황에서 필요한 정보이다. 아래처럼 TCP의 PORT 정보를 활용하면 우리는 한 서버 내에서 오는 다양한 프로세스를 구별할 수 있게 된다. 즉, PORT는 같은 IP 내에서 프로세스를 구분하게 해주는 식별자라고 보면 되겠다. 이름부터가 "항구..