SW 사관학교 정글(Jungle) 43

[Pintos : 동기화] 락(Lock)

락(Lock)세마포어와 유사하지만 주로 리소스에 대한 상호 배제를 보장하기 위해 사용된다.세마포어처럼 동작하지만 초기값이 1인 세마포어와 동일한 개념이다. 락의 목적한 번에 하나의 스레드만 특정 리소스에 접근할 수 있도록 보장락의 연산 락 획득(Acquire): 세마포어의 down 연산에 해당하며, 락을 잠그고 현재 스레드가 리소스를 사용하게 만듭니다.락 해제(Release): 세마포어의 up 연산에 해당하며, 락을 풀고 다른 대기 중인 스레드가 리소스를 사용할 수 있도록 합니다.락의 추가적인 제약세마포어와 비교했을 때, 락에는 하나의 중요한 제약이 있습니다. 락을 획득한 스레드, 즉 `락의 소유자(owner)`만 `그 락을 해제`할 수 있습니다. 만약 다른 스레드가 락을 해제하려고 시도하면, 이는 잘못..

[Pintos : 동기화] 세마포어(Semaphore)

세마포어(Semaphore)비동기적으로 실행되는 여러 스레드나 프로세스 간의 **동기화(synchronization)**를 위해 사용하는 중요한 도구이다. 세마포어의 두 가지 연산 Down 또는 P 연산: 세마포어 값이 양수일 때까지 대기하고, 양수가 되면 그 값을 1 감소시킵니다.Up 또는 V 연산: 세마포어 값을 1 증가시키고, 대기 중인 스레드가 있으면 하나를 깨워서 실행시킵니다.이제 세마포어가 "0,1, 그 이상의 수" 초기화 되는 경우 3가지를 설명합니다.세마포어의 활용 예시세마포어는 `0`으로 초기화되면 한 번만 발생하는 `이벤트를 기다리기 위한 목적`으로 사용할 수 있다.스레드 A가 스레드 B를 생성하고, 스레드 B가 어떤 작업을 완료할 때까지 A가 기다려야 한다고 가정해봅시다. 스레드 A는..

[Pintos] 동기화(Synchronization)

동기화(Synchronization)여러 스레드가 자원을 공유할 때 발생할 수 있는 문제들을 방지하는 데 중요한 역할을 한다. 동기화가 제대로 이루어지지 않을 때..- 경쟁상태나 데이터 손상, 예측할 수 없는 동작과 같은 문제가 발생할 수 있다. - 운영체제 커널에서 이러한 문제 발생시 시스템 전체를 다운 시켜버릴 수 있다. 그래서 Pintos에서는 여러 동기화 프리미티브(primitives)를 제공하여 이러한 상황을 제어한다. 1. 인터럽트 비활성화(disabling interrupts)동기화의 가장 원시적인 방법은 인터럽트를 비활성화하는 것이다. cpu가 인터럽트에 응답하는 것을 일시적으로 차단인터럽트가 꺼져 있으면, 현재 실행 중인 스레드는 타이머 인터럽트(timer interrupt)에 의해 선점..

[C언어][csapp] Tiny서버 구현 시 SIGPIPE 상황 발생 해결 (문제 11.7과 연결)

https://jinsang-2.tistory.com/87  링크 11.7의 문제의 연장선이라 볼 수 있다.  [CSAPP] 11장 숙제(Homework) 문제 정답11.7) Tiny를 확장해서 MPG 비디오 파일을 처리하도록 하시오. 실제 브라우저를 사용해 여러분의 결과를 체크하시오(MPG 대신 mp4)1.get_filetype에 mp4 추가하기 //MIME type을 읽고 값을 *filetype에 저장void gejinsang-2.tistory.com{IP 주소}.godzilla.jpg로 직접 요청하기잘 나온다!!❗문제발생{IP 주소}.video.mp4 요청 시 SIGPIPE, Broken pipe가 뜨고 영상은 안나온다..접속 시에 서버는 터진다..GDB 디버깅 시도 rio_writen() 부분에서..

[CSAPP] 11장 숙제(Homework) 문제 정답

11.7) Tiny를 확장해서 MPG 비디오 파일을 처리하도록 하시오. 실제 브라우저를 사용해 여러분의 결과를 체크하시오(MPG 대신 mp4)1.get_filetype에 mp4 추가하기 //MIME type을 읽고 값을 *filetype에 저장void get_filetype(char *filename, char *filetype){ if (strstr(filename, ".html")) // 파일 확장자가 .html이면 strcpy(filetype, "text/html"); // MIME 타입을 text/html로 설정 else if (strstr(filename, ".gif")) // .gif 파일이면 strcpy(filetype, "image/gif"); /..

[CSAPP] 11.4 소켓 인터페이스

소켓 인터페이스는 네트워크 응용을 만들기 위한 Unix I/O 함수들과 사용되는 함수들의 집합이다. 전형적인 클라이언트-서버 트랜잭션의 문맥에서 소켓 인터페이스의 개요를 보여준다. 이 그림만 보면 막막하지 않은가? 이해를 돕기 위해 전화를 비유를 들어 설명해보겠다.  이 그림은 네트워크 프로그램에서 클라이언트(Client)와 서버(Server)가 서로 통신하는 과정을 보여준다. 간단히 말해, 클라이언트는 서버에 연결을 요청하고, 서버는 그 요청을 받아들이며 서로 데이터를 주고받는 구조를 나타낸다. 🤔클라이언트와 서버가 대화를 나누는 장면을 상상해보기!💭주소 찾기:`클라이언트`는 우선 누구랑 대화할지(즉, 서버의 주소)를 찾아야 합니다. 이 단계가 `getaddrinfo`입니다. 예를 들어, 클라이언트..

[CSAPP] 11.3 글로벌 IP 인터넷

https://jinsang-2.tistory.com/84 [CSAPP] 11.2 네트워크💡호스트에게 네트워크는 단지 또 다른 I/O 디바이스이다 !그림처럼 데이터를 위한 소스와 싱크로 서비스한다. I/O 버스의 확장 슬롯에 꽃혀 있는 어댑터는 네트워크에 물리적인 인터페이스를jinsang-2.tistory.com 글로벌 IP 인터넷은 11.2에서 봤듯이 LAN과 WAN과 라우터를 통해 internet을 성공적으로 구현한 것이다.각 인터넷 호스트는 `TCP/IP` 프로토콜을 구현한 소프트웨어를 실행한다. 인터넷 클라이언트와 서버는 `소켓 인터페이스`와 `Unix I/O 함수`들의 혼합을 사용해서 통신한다. 소켓 함수들은 일반적으로 `시스템 콜`들로 구현되며 이 시스템 콜은 커널에서 트랩을 발생시키며, T..

[CSAPP] 11.2 네트워크

💡호스트에게 네트워크는 단지 또 다른 I/O 디바이스이다 !그림처럼 데이터를 위한 소스와 싱크로 서비스한다. I/O 버스의 확장 슬롯에 꽃혀 있는 어댑터는 네트워크에 물리적인 인터페이스를 제공한다. 네트워크에서 수신한 데이터는 I/O와 메모리 버스를 거쳐서 어댑터에서 메모리로, 대게 DMA 전송으로 복사된다. 소스와 싱크로 서비스 : 소스는 데이터를 보내는 쪽, 싱크는 데이터를 받는 쪽을 의미한다. 네트워크 상에서 데이터를 보내는 장치와 받는 장치가 서로 데이터를 주고 받으며 역할을 분담한다는 뜻DMA 전송 : DMA 전송(Direct Memory Access)은 컴퓨터의 메모리와 주변 장치 간에 데이터를 CPU를 거치지 않고 직접 전송하는 방법 💡이더넷물리적으로 네트워크는 기하학적 위치로 구성된 계..

[CSAPP] 11-1 클라이언트-서버 프로그래밍 모델

모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초한다.서버 : 일부 리소스를 관리하고, 이 리소스를 조작해서 클라이언트를 위한 일부 서비스를 제공웹 서버는 디스크 파일들을 관리하고, 클라이언트를 대신해서 이들을 가져오고 실행한다.FTP 서버는 클라이언트를 위해 저장하고 읽어오는 디스크 파일들을 관리이메일 서버는 클라이언트를 위해서 읽고 갱신하는 스풀 파일을 관리클라이언트-서버 모델에서 근본적인 연산은 트랜잭션이다.클라이언트 - 서버 트랜잭션의 4 단계클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청 request을 서버에 보내는 것으로 트랜잭션을 개시서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다.서버는 응답 response을 클라이언트로 보내고, 그 후에..

[CSAPP] 9-9 동적 메모리 할당(Dynamic Memory Allocation)

나머지 9.9의 자세한 내용은 pdf 파일을 참고해주세용~Intro동적 메모리 할당기는 힙 (heap)이라는 프로세스의 가상메모리 영역을 관리한다.커널은 힙의 꼭대기를 가리키는 변수 brk("break")를 사용할당기는 힙을 다양한 크기의 블록들의 집합으로 관리메모리 구조 잠깐 정리Code 영역(.text) : 실행할 프로그램의 작성한 코드들이 담긴다.Initialized Data 영역 (.data) : 초기화된 전역 변수 및 정적 변수가 저장되는 공간ex) int x = 10;Uninitialized Data 영역 (.bss) : 초기화되지 않은 전역 변수 및 정적 변수가 위치하는 영역ex) int x;Heap 영역 : 동적으로 할당되는 메모리 공간프로그램이 실행되는 동안, 런타임에 필요할 때 메모리를..