728x90
반응형

크래프톤 정글/TIL 41

PintOS 프로젝트 1주차 [Threads / Priority Scheduling]

Priority Scheduling은 우선순위 스케줄링을 의미한다. Alarm Clock에서는 ready_list에 우선순위를 생각하지 않고 스레드를 삽입했고, 모든 스레드가 공평하게 CPU를 사용했기에 더 자주 CPU를 사용해야 할 스레드가 자주 CPU를 사용하지 못해서 비교적 비효율적 이었다.(FIFO방식) 이번엔 스레드마다 우선순위(Priority)를 부여해서 ready_list에 우선순위 순으로 정렬하여 삽입하고, 우선순위가 높은 스레드부터 CPU를 점유하도록 개선할 것이다. 또한, 이미 특정 스레드가 CPU를 사용하고 있더라도 더 높은 우선순위의 스레드가 ready_list에 들어오면 CPU를 빼앗는 선점(Preemption)도 구현할 것이다. 단 timer_interrupt마다 thread_a..

PintOS 프로젝트 1주차 [Threads / Alarm Clock]

PintOS는 알람을 구현할 때 기본적으로 busy waiting 방식을 사용한다.따라서 sleep/wakeup 방식으로 개선하는 것이 목표이다.  timer_sleep 함수는, running중인 스레드를 지정된 ticks 동안 blocked 시키는 함수이다.기존의 timer_sleep은 위 사진처럼 busy waiting이 일어나도록 설계되어 있다. 지정된 ticks가 지날 때 까지 while문 조건을 끝없이 검사하며 의미없이 CPU를 잡아먹는다.즉, 지정된 시간을 기다리기만 할 뿐인 스레드가 무의미하게 while문을 돌며 CPU자원을 소모한다. 이것이 busy waiting이며, 개선해야 하는 부분이다.  어떻게 개선해야 하는가?- thread 구조체에, 깨어나야 할 시간을 의미하는 Local Tic..

크래프톤 장병규 의장님 티타임 / 창업과 관련된 답변들

성공한 사업가가 되기 위해 중요한 점- 수도 없이 많을 테지만, 주변에 능력 있고 멋진 사람이 많아야 한다.- 혼자 잘나서 성공할 수도 있지만 그것은 어렵다.- 또한 정말 큰 기업이 되려면 운도 굉장히 중요한 요소이다. 주변에 멋진 사람을 많이 만드는 법- 가장 먼저 스스로가 멋진 사람이 되어야 한다.- 사람을 최대한 많이 만나고, 경험하고 배워야 한다.- 스스로를 사람을 많이 만나는 환경에 노출시켜야 멋진 사람을 얻을 확률도 높아진다.- 의도적으로 멋진 사람을 많이 만나려고 노력해야 한다. 창업을 하기 위해서는..- 창업과 관련된 커뮤니티, 글, 책 등에 최대한 나를 노출시켜라.- 그곳에서 최대한 많은 지식과 정보를 접하고 익숙해져야 한다. 자연스레 창업에 관한 많은 것들을 배우고 어떤 방향으로 나아가..

[크래프톤 정글 5기] PintOS 프로젝트 여섯번째 날, Multiprocess vs Multithread, deadlock 해결 전략

응용 프로그램 구현 시, Multiprocess와 Multithread중 하나를 선택하는 기준1. 안정성 vs 자원 사용 : 시스템 안정성이 매우 중요하면 멀티프로세스가 선호된다. 리소스가 제한적인 경우 멀티스레드가 더 효율적일 수 있다.2. 구현의 복잡성 : 스레드는 공유 메모리로 인해 동기화 문제가 복잡해질 수 있다. 따라서 멀티스레드를 사용하려면 개발자의 동시성 제어에 대한 이해도가 중요하다.3. 응답 시간 : 멀티 스레드는 Context Switching이 빠르게 때문에, 빠른 응답 시간을 요구하는 경유 유리하다.4. 플랫폼 및 언어 지원 : 사용 중인 프로그래밍 언어나 플랫폼이, 멀티스레드 또는 멀티프로세스 중 어느 쪽을 더 잘 지원하는지 고려할 수 있다. 멀티프로세스 : 조금 느리고 쉽지만 안..

[PintOS] 키워드 정리 ( Process, Thread, CPU Scheduling, Semaphore, Mutex, Race Condition, Deadlock, Context Switching, MLFQ )

프로세스(Process)- 관리하는 최소 단위의 작업, 주기억장치에 등록된 프로그램 즉 실행중인 프로그램- CPU에 의해 실행되는 시스템 및 사용자 프로그램- 하나의 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있음 스레드(Thread)- “하나의 프로세스 내에서 동시에 진행되는” 작업 갈래, 흐름의 단위ex) 하나의 브라우저에서, 파일을 다운받으면서 음악을 듣고 쇼핑을 하고 게임도 하는 것- 멀티(다중) 스레드 : 스레드가 여러 개 있는 것- 스레드는 프로세스의 메모리 영역(Code, Data, Heap, Stack) 중 Stack만 할당받아 복사하며, 나머지 Code, Data, Heap은 다른 스레드들과 “공유” 한다.- 따라서 Stack은 별도이지만 Heap은 공유하기 때문에 서로 다른 스레..

[webproxy-lab] 웹 소켓 통신 / Tiny Web Server 구현 (C언어)

Tiny Web Server는 말 그대로 작은 웹 서버이다.클라이언트의 요청을 받아 두개의 수를 더하는 adder 프로그램을 실행할 수 있으며,클라이언트가 정적 컨텐츠를 요청하는지, 동적 컨텐츠를 요청하는지 판단하여 Response를 보낼 수 있다. main 함수int main(int argc, char **argv) {  int listenfd, connfd;  char hostname[MAXLINE], port[MAXLINE];  socklen_t clientlen;  struct sockaddr_storage clientaddr;    // 포트번호 인자가 없으면 사용법 출력  /* Check command line args */  if (argc != 2) {    fprintf(stderr, "..

[webproxy-lab] 웹 소켓 통신 / Echo Server,Client 구현 (C언어)

클라이언트와 서버는 소켓 기반으로 연결된다.클라이언트의 요청을 서버가 받아서 그대로 되돌려주는 형태의 Echo Server와 Client를 구현해볼 것이다.주석이 상세히 달려 있으니 추가적인 코멘트는 필요 없을 거라고 생각한다.  Echo Client#include "csapp.h"// 인자 3개를 받는다.int main(int argc, char **argv) {    // 클라 소켓의 fd를 저장할 변수    int clientfd;    // 서버호스트명, 서버포트번호, 버퍼 저장할 변수    char *host, *port, buf[MAXLINE];    // rio 구조체 선언    rio_t rio;    // 이 프로그램 실행 시, 인자가 3개가 아니면 사용법을 출력한다    // 인자 1 ..

[webproxy-lab] 네트워크 프로그래밍 / 소켓 통신의 개념

파일 디스크립터(File Descriptor, FD)- 유닉스/리눅스 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값- 이 값은 일반적으로 “0이 아닌 양수 정수값”을 갖는다.- 프로세스 실행 중 파일을 Open하면, 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해 준다.- 이후 프로세스가 System Call을 이용해서 Open되어있는 파일에 접근할 때, FD값을 이용해서 파일을 지칭한다.- 기본적으로 할당되는 FD는 표준입력(Standard Input), 표준출력(Standard Output), 표준에러(Standard Error) 3가지이며 각각 0, 1, 2가 할당된다.   네트워크- 호스트에게 있..

[malloc-lab] 동적 메모리 할당 / 명시적 가용 리스트 방식 구현 (C언어)

명시적 가용 리스트(Explicit Free lists)- 묵시적 가용 리스트는 할당 시간이 전체 힙 블록의 수에 비례하기 때문에 범용 할당기로는 적합하지 않음- 명시적 가용 리스트는 가용 블록만을 위한 연결 리스트를 만들어 활용한다.- free 블록 안에 predecessor, successor를 넣어서 앞/뒤 미할당 블록을 가리키게 하여 구현할 수 있다. LIFO(Last In First Out) 정책을 사용하여 구현한다.- 할당 해제되어 새롭게 생긴 free 블록을, 리스트의 앞 부분에 삽입하여 Stack처럼 후입선출이 이루어지도록 한다.- free_listp는 항상 리스트의 가장 앞 부분(삽입되는 부분이자 가장 먼저 탐색되는 부분)을 가리키고 있다. - LIFO + first fit 정책을 사용하..

[malloc-lab] 동적 메모리 할당 / 묵시적 가용 리스트 방식 구현 (C언어)

동적 메모리 할당의 개념과 묵시적 가용 리스트 방식에 대한 자세한 설명은 이전 글에 있다.https://yskisking.tistory.com/221  기본 상수 및 매크로 정의 묵시적 가용 리스트 조작을 위한, 기본 상수 및 매크로에 대한 정의 #define WSIZE 4- 기본 워드 사이즈 설정#define DSIZE 8- 기본 더블워드 사이즈 설정#define CHUNKSIZE (1- 초기 가용 블록 크기이며, 일반적으로 힙 확장시에도 CHUNKSIZE 단위로 확장된다. (2의12승, 4096byte, 4KB) #define PACK(size, alloc) ((size) | (alloc))- (할당할 크기, 1or0) 입력하면 할당할 크기의 맨 마지막 자리가 0 또는 1로 설정되어 반환된다. ( 즉..

728x90
반응형