728x90
반응형

정글 37

PintOS 프로젝트 1주차 [Threads / 트러블 슈팅]

Alarm Clock1. sleep_list 정렬기존 thread_sleep() 함수에서는 sleep_list에서 깨울 스레드를 찾기 위해 모든 리스트 요소를 다 뒤져야 했다.따라서 불필요한 리스트 순회가 존재했다.// 로컬틱 넣고, state 변경하고, sleep_list에 넣고, 스케줄러 호출하기void thread_sleep(int64_t ticks) {     ......생략.....        // 현재 스레드가 idle이 아닐 경우    if(curThread != idle_thread) {                // 로컬 틱 설정        curThread->localTick = ticks;                // localTick 기준으로 정렬되어 삽입        li..

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

이전 Priority Scheduling과 이어지는 글이다.이 글에서는 저번 글에 이어서, Priority Donation을 구현하는 것을 메인으로 다룬다.  thread.hstruct thread {    /* Owned by thread.c. */    tid_t tid;                          /* Thread identifier. */    enum thread_status status;          /* Thread state. */    char name[16];                      /* Name (for debugging purposes). */    int priority;                       /* Priority. */    ..

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..

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

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

[Baekjoon 13717 / Java / 실버5] 포켓몬 GO

N : 포켓몬 종류 개수P : 포켓몬M : P 포켓몬에 대한 총 사탕 개수K : P 포켓몬을 진화시키기 위해 필요한 사탕 개수  포켓몬을 진화시키면 2개의 사탕을 추가로 받게 된다.모든 포켓몬을 총 몇 번 진화시켰는지, 그리고 가장 많이 진화한 포켓몬의 이름을 출력하면 된다. 총 진화횟수를 upgrade 변수에 세고, 각 포켓몬마다의 진화횟수를 count로 세서 가장 많이 진화한 포켓몬 이름을 갱신해 주었다.진화할 때마다 사탕 2개를 받게 되니, 진화 시 "총 사탕 개수 - 필요한 사탕 개수" 를 할 때 2개를 덜 빼주면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;// ..

입소 55일차, 대망의 PintOS 프로젝트 시작

벌써 입소 후 55일이 지나 3일 전 목요일부터 PintOS 프로젝트가 시작되었다. 이젠 정글의 일상에 적응할 대로 적응해서 크게 힘들거나 하는 건 없다. 아니 물론 힘들긴 하다. 하지만 못 버틸 정도는 아닌 수준이다. 지난 주 webproxy 주차는 나름 나쁘지 않은 성과였지만, 시간이 너무 부족해 web server만 만들고 메인 과제인 proxy서버를 구현하지 못 해서 아쉬움이 남았다. 구현하지 못 한 게 아니라 접근조차 못 했다. proxy 전 과제인 tiny web server 를 끝낸 후 복습하면서 블로그에 정리 글을 올렸더니 이미 수요일이 끝나 있었다. 이틀.. 아니 딱 하루만 더 있었더라도 proxy서버까지 끝낼 수 있었을 텐데. 아쉬움이 남는다. 그나마 위안이 되는 것은 다른 사람들도 나..

[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] 웹 소켓 통신 / 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가 할당된다.   네트워크- 호스트에게 있..

[크래프톤 정글 5기] week06 malloc-lab 주차 여섯번째 날, 페이징/세그먼테이션, DMA

페이징과 세그먼테이션세그먼테이션(Segmentation)- 메모리를 “세그먼트”단위로 나누는 방법- 각 세그먼트는 시작 길이와 주소를 가지며, 다른 유형의 데이터(코드, 데이터, 스택 등)을 위해 사용됨- 메모리를 유연하게 관리할 수 있게 하며, 프로그램의 논리적 구조를 반영함 페이징(Paging)- 메모리를 동일한 크기의 블록인 “페이지”로 나누는 방법- 각 페이지는 가상 메모리 주소와 매핑되고, 페이지 테이블을 통해 물리적 메모리 주소로 변환됨- 메모리 관리를 단순화시키고 낭비를 줄이며, 프로그램 간 메모리 충돌을 방지함 세그먼테이션 : 장점- 메모리를 논리적 단위로 나눠, 프로그램 구조를 반영한다.- 세그먼트별 보호/공유가 용이하다.세그먼테이션 : 단점- 외부 단편화 발생 가능성- 메모리 관리가 복..

728x90
반응형