전체 글 47

Multi-Level Feedback Queue Scheduler

핀토스 1주차 Option 과제인 Advanced Scheduler를 구현해봤습니다. 기존의 Priority Scheduler의 경우에는 우선 순위가 낮은 스레드가 오랫동안 CPU를 점유하지 못하는 문제가 발생할 수 있습니다. 이로 인해 스레드의 평균 반응 시간이 너무 길어지는 문제가 발생합니다. 이를 해결 하기 위한 방법으로 multi-level feedback queue scheduler가 제시되었습니다. MLFQS는 Priority에 따라 여러 개의 Ready Queue가 존재하고, Priority에 영향을 주는 변수가 있어서 Feedback으로 Priority를 조절할 수 있습니다. 이 때, multi level까지는 구현하기 힘들 것 같아서 Feedback만 구성을 해봤습니다. 사실 상 feed..

OS 지식

OS의 일반적인 작동 원리운영 체제는 컴퓨터 하드웨어와 소프트웨어 간의 중재자 역할을 하며, 시스템 자원을 효율적으로 관리하고 사용자와 애플리케이션이 이를 쉽게 사용할 수 있도록 도와줍니다.운영 체제의 주요 기능은 다음과 같습니다:프로세스 관리: 운영 체제는 여러 프로그램이 동시에 실행될 수 있도록 CPU 시간을 할당하고, 각 프로세스 간의 자원 충돌을 방지하며, 문맥 전환을 통해 효율적으로 멀티태스킹을 지원합니다.메모리 관리: 운영 체제는 각 프로세스에 필요한 메모리를 할당하고, 가상 메모리 기법을 통해 물리적 메모리를 효율적으로 사용합니다. 이를 통해 메모리 부족 시에도 프로그램이 원활히 실행될 수 있도록 합니다.파일 시스템 관리: 운영 체제는 데이터를 파일 단위로 저장하고, 이를 디렉터리 구조로 관..

WIL/스터디 2024.08.27

인터넷 지식

인터넷의 작동 원리먼저, 인터넷에 연결된 각 장치는 고유한 IP 주소를 가지고 있으며, 사용자가 웹사이트에 접근할 때는 도메인 이름을 통해 IP 주소를 찾아냅니다. 이 과정은 DNS 서버를 통해 이루어집니다.데이터는 작은 패킷으로 나뉘어 전송되며, 각 패킷은 라우터를 통해 목적지까지 전달됩니다. 이때 TCP/IP 프로토콜이 데이터를 신뢰성 있게 전달하는 역할을 합니다.사용자가 웹사이트를 요청하면, 클라이언트는 서버에 HTTP 또는 HTTPS 요청을 보내고, 서버는 요청에 따라 웹 페이지나 데이터를 응답합니다. 이러한 모든 과정은 ISP를 통해 이루어집니다. HTTP란?HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버 간에 데이터를 주고받기 위한 표준 프로토콜입니다. ..

WIL/스터디 2024.08.27

Thread & Process

Alarm Clock최초에 Busy Waiting으로 구현. 이는 특정 조건이 충족될 때까지, 프로세스나 스레드는 루프를 돌며 해당 조건을 지속적으로 확인합니다. 이 과정에서 CPU는 계속해서 이 루프를 실행하게 되어, 해당 프로세스나 스레드가 CPU를 점유한 상태가 됩니다. 때문에 이러한 방식은 CPU 자원을 낭비하게 되고, 이를 Sleep Awake 방식으로 수정하게 됨.Thread Scheduler핀토스의 스케줄러는 Round Robin으로 구현되어 있습니다. 이는 중요도에 상관없이 모든 스레드를 번갈아가며 수행합니다. 이를 Priority Scheduler로 수정하고 Donation 기능을 넣는다던가 하는 방식으로 수정하게 됩니다. 저는 Extra 과제인 Multi Level Feedback Qu..

WIL/스터디 2024.08.25

Malloc Lab

Mallocmalloc은 지정된 크기만큼의 메모리를 할당하고 할당된 메모리의 시작주소를 반환한다.이 때, 할당된 메모리는 초기화되지 않기 때문에 그 위치에 저장된 값들이 남아 있을 수 있다. Calloccalloc은 malloc과 같이 메모리를 할당해주지만, 할당된 메모리의 값을 모두 0으로 초기화한다. Implicit Malloc (암시적)프로그래머가 직접 메모리 할당을 지시하지 않아도 컴파일러 혹은 런타임이 자동으로 메모리를 할당하는 경우. 보통 가비지 컬렉션이 있는 언어인 Java나 Python에서 객체를 생성할 때 명시적으로 메모리 할당을 하지 않아도 된다. 내부 단편화가 발생할 수 있고 속도가 상대적으로 느리다. Explicit Malloc (명시적)프로그래머가 직접 메모리 할당을 지시하고, 할..

WIL/스터디 2024.08.25

Virtual Memory

가상메모리란 무엇인가?물리 메모리(RAM)에 한계가 있기 때문에 이를 보완하기 위해 만든 것이 가상 메모리입니다. HDD나 SSD의 자원을 끌어다써서 메모리 공간을 추상화시켜 OS가 자신의 메모리가 마치 무한한 것처럼 사용할 수 있게 해줍니다. 1. 페이지페이지는 가상 메모리에서의 기본 단위입니다. 운영 체제는 각 프로세스에 가상 메모리 공간을 제공하며, 이 가상 메모리 공간은 일정한 크기의 페이지로 나뉩니다. 페이지는 프로세스가 사용하는 메모리 블록을 의미하며, 가상 주소 공간에서 특정 범위의 주소를 나타냅니다.2. 프레임프레임은 물리 메모리(RAM)에서의 기본 단위입니다. 물리 메모리는 프레임이라는 고정된 크기의 블록으로 나누어져 있으며, 각 프레임은 가상 메모리의 페이지와 매핑됩니다.3. 페이지 테..

WIL/스터디 2024.08.23

Pintos Extra Questions

1. %rip, %rsp 레지스터의 의미와 CPU 동작에서의 역할%rip (Instruction Pointer Register): %rip는 현재 실행 중인 명령어의 메모리 주소를 가리키는 레지스터입니다. 프로세서가 명령어를 실행할 때마다 %rip는 다음에 실행할 명령어의 주소로 업데이트됩니다. 명령어 실행이 완료되면 %rip는 자동으로 다음 명령어의 주소로 증가하거나, 점프(분기) 명령에 따라 특정 주소로 설정됩니다.%rsp (Stack Pointer Register): %rsp는 현재 스택의 최상단을 가리키는 레지스터입니다. 함수 호출 시, 함수의 리턴 주소나 지역 변수를 저장하기 위해 스택을 사용하게 되며, 이때 %rsp는 스택의 최상단을 관리합니다. PUSH 및 POP 명령어는 %rsp를 조작하여..

WIL/스터디 2024.08.22

Red-Black Tree Extra Questions

1. Segmentation Fault (Core dumped)"Segmentation Fault (Core dumped)"라는 에러 메시지는 프로그램이 허용되지 않은 메모리 영역에 접근하려고 할 때 발생합니다. 이 메시지는 다음과 같은 문제들로 인해 발생할 수 있습니다:잘못된 포인터 참조 (예: NULL 포인터 참조, 초기화되지 않은 포인터 사용)배열 범위를 초과한 접근이미 해제된 메모리 접근스택 오버플로우core dumped는 프로세스가 비정상 종료되었을 때, 시스템이 해당 시점의 메모리 상태를 파일로 저장했다는 의미입니다. 이 파일을 사용해 프로그램이 종료된 시점의 상태를 분석할 수 있습니다.2. Core dumped ?core 파일은 프로세스가 비정상 종료될 때 메모리의 상태를 덤프한 파일입니다...

WIL/스터디 2024.08.21

[Week15] 나만의 무기를 갖기 - 5

최종발표까지 준비를 많이 했고, 서버 상태도 완벽하게 해놨는 데, 어이없게 발표 때 문제가 터지고 말았다. STT서비스인 리턴제로 쪽에 보내는 API가 한번에 뭉치는 문제가 생겨 429 에러코드가 계속 들어와서 STT가 되지 않았다. 한번도 이런 적이 없었는데... 무튼, 이 때문에 발표 중간에 NLP 서버를 재부팅했고, 다시 동작하는 것을 확인했다. 그러나 이 진행 상태를 알 리 없는 태리는 오류가 터지자마자 혹시 몰라서 준비해놨던 비상용 시연 영상을 빠르게 틀어버렸고, 우리는 시연을 하는 데에 실패했다. 발표가 끝나고 질문 시간에 아무도 질문을 하지 않아 조금 불안했다. 아무래도 지피티를 사용해서 남이 볼 때 아 그냥 쉽게 쉽게 갔구나로 보일 수도 있다고 생각했다. 그러다가 어떤 분이 오셔서 이것 저..

[Week15] 나만의 무기를 갖기 - 4

중간 발표를 마쳤는 데, 운영진 측에서 키워드 맵으로 문맥 파악이 전혀 안되는 데 문맥 파악이 되었다고 억지를 부리는 느낌이다. 수정하라는 피드백이 들어왔다. 이 때문에 다시 회의를 했는 데, 결국 문맥 파악이라는 것에 초첨을 두게 되면 키워드 맵으로는 당연히 단어끼리의 연결이기 때문에 될 수가 없었고, 다시 처음으로 돌아가 마인드 맵으로 수정해야 한다는 결론이 나왔다. 차라리 처음에 마인드맵으로 하지말고 키워드맵으로 하라는 피드백이 없었으면 더 나았을까? 라는 생각도 문득 스쳐지나갔다. 그러나 우리의 아키텍쳐는 이미 키워드 맵에 맞게 끔 수평 관계로 구성되어 있었다. 각 노드는 서로의 존재를 모르고 이 노드들을 연결하는 Edge라는 구조체가 있는 상태였다. 이를 마인드맵으로 수정하려면 일단 상하 관계가..