728x90 정글 2기/OS 운영체제25 [pintos] Project 1_alarm [pintos] Project 1_alarm pintos는 기본 기능들만 구현된 작은 운영체제이다. 마치 tiny web server처럼 이 운영체제에는 실행중인 스레드를 잠시 재우고 다른 스레드에서 진행하는 하는 기능이 있는데, 처음에는 busy waiting 방식으로 구현되어 있다. 이를 Sleep / Awake로 구현하는 것이 첫 번째 과제이다. Busy waiting 구현 busy waiting은 매 시간 자고 있는 스레드를 깨워 시간을 확인한 후 아직 깨울 시간이 안됐으면 다시 재운다. 이를 계속 반복하다 꺠어날 시간이 되었을 때 깨우는 방식이다. 이는 매우 비효율적인 방식으로 많은 CPU 시간을 낭비한다. busy waiting은 아래와 같이 구현되어 있다. thread_yield 함수로 sc.. 2021. 10. 4. [PintOS] 로딩 (Loading) [PintOS] 로딩 (Loading) 1. Loader 로딩(Loading) : pintos 첫 실행시 진행되는 부팅의 과정이다. 부팅(Booting) : 컴퓨터를 구동하여 기초적인 초기화 작업을 수행하고 운영 체제를 읽어오는 일련의 작업이다. 로더(Loader) : 부팅 작업을 진행하는 프로그램. Disk의 첫 번째 섹터에 저장되어 있다. 1) BIOS(ROM에 있음)가 로더(Loader)를 메모리에 로드(Load) 한다. BIOS는 컴퓨터가 구동된 후 저장 장치(Disk)의 첫 번째 섹터를 탐색해여 이 장치가 부팅 가능한지 검사한다. (BIOS : Basic Input/Output System 입출력 처리 펌웨어) Sector : 저장 장치(Disk)에서 데이터를 저장하는 최소 단위로, 한 섹터의 .. 2021. 10. 4. [PintOS] 디버깅 도구(Debugging Tool)_printf, ASSERT, __attributes__, backtraces [PintOS] 디버깅 도구(Debugging Tool)_printf, ASSERT, __attributes__, backtraces Printf 코드 사이사이에 printf 함수를 넣어 출력을 통해 디버깅 할 수 있다. 간단하지만 효과적인 방법 ! ASSERT 표준 c library 중 하나인 assert.h 에 있는 매크로이다. pintos 에서는 에 구현되어 있다. /* NDEBUG는 디버그 모드가 아닌경우(릴리즈 모드)를 말한다.(Not DEBUG) * #ifndef는 매크로가 정의되지 않은 경우에만 코드를 컴파일 함. * ASSERT 매크로는 조건이 맞지 않을 때 프로그램 중단 */ #ifndef NDEBUG #define ASSERT(CONDITION) \ if ((CONDITION)) { }.. 2021. 10. 3. [OS운영체제] 권영진 교수님 OS 강의 (카이스트 전산학부) [OS운영체제] 권영진 교수님 OS 강의 (카이스트 전산학부) 키워드들 위주로 작성. 이후 검색해 볼 것 CS 에서 system 특히 Operating system이 전공필수가 되었다. 그만큼 중요하다. OS 시스템을 공부해야하는 이유가 뭘까?를 아는 게 공부하는 데 도움이 된다. 1. - mmap : 1MB 쓰겠다고 선언을 해도 실제로 주진 않는다. 가상 메모리에다가 allocation만 해준다. - memset으로 1로 채운다. 이 때 메모리를 준다. - on-demand allocation - 1MB에 4KB 씩 PA(RAM)에 page를 줌 - 처음 memory(Physical address) 접근시 page fault, 그 이후 할당 되고 2차 접근시 page fault 안남. 하지만 사용자 입.. 2021. 10. 1. [OS운영체제] Network Programming_TCP/IP echo server, echo client [OS운영체제] Network Programming_TCP/IP echo server, echo client echo서버는 클라이언트가 보낸 내용을 그대로 전송해 주는 프로그램이다. 그럼 echo 서버와 echo 클라이언트를 작성하여 보자. echo.c 함수 //echo - read and echo text lines until client closes connection /* $begin echo */ #include "csapp.h" void echo(int connfd) { size_t n; char buf[MAXLINE]; rio_t rio; Rio_readinitb(&rio, connfd); while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) { //li.. 2021. 9. 26. [OS운영체제] Tiny Web Server 정리 및 Thread와 fork() [OS운영체제] Tiny Web Server 정리 및 Thread와 fork() Tiny웹서버 정리 Tiny Web Server socket() 함수를 통해 socket 생성 후 bind()를 통해 주소 연결하고 listen()함수로 수동적인 상태로 만듦. 이 식별자를 가지고 accept()로 client의 connection을 기다림 연결 되면 connfd가 생성되고 이로서 읽고 쓰기 통신이 가능해짐 doit(connfd)를 통해 HTTP transaction 처리 doit HTTP reqeust 요청 라인 읽어서 정보 파악 (GET / HTTP/1.1) 파싱 후 static contents인지 dynamic contents인지 파악 static인 경우 디스크 내용 Mmap()을 통해 가상메모리 매핑 .. 2021. 9. 25. 이전 1 2 3 4 5 다음 728x90