728x90

크래프톤 129

8Weeks_CoffeeChat

CoffeeChat 카이스트 핀토스 영상이 있던데, 어떻게 구현하는지 이정표 정도만 나온다고 한다. 이런것을 보고 좀 참고해도 될까요? 된다면 어느정도 봐야할까요? 이정표가 없어서 내 아키텍처가 맞는지 검증이 안되는게 큽니다. 베스트는 안보는게 맞다. 하지만 너무 어렵고, 길이 안보인다면 개인이 잘 잘라내어서 보는것도 하나의 방법이다. 이론적인 부분과 핵심적인 부분을 잘 캐치해라. Project1 에서 중요한 것은 thread이다. thread와 스케줄링을 잘파악하고 알아봐라. 아키텍쳐의 경우 설계철학이 중요하다. 큰 틀에서 맥락을 이해라고 작게 나눠가며 짜면 좋다. 이론적인 부분이 어렵다면 개념적인 부분과 구현으로 교차비교하면 좋다. 키워드 정리가 이해는되지만 안외워질때가 많은데 어떻게 해야할까요? 키..

7Weeks_CoffeeChat

CoffeeChat 18.04 버전을 사용해서 PintOS를 배우는 이유 개발 환경상 버전에 따라서 작동하는 방식이 조금씩 달라진다. Pair Programming을 필수적으로 해라. 이합집산을 잘하고, 팀마다 어떻게 할지 잘 생각해서 정해라. 구현을 우선으로 진행하고, 팀마다 맞는 상황으로 진행해라 전체 맥락을 이해하는 것이 중요하다. 얼마나 깊게 파야하는지? 이번 기회에 적당히 깊게 파는것은 괜찮아보인다. 하지만 너무 깊게 파고 들어가지말고 정도를 정해놓아라. 과거에는 빅뱅까지 갔던 사람도 있었다. PintOS를 볼 때 어느정도는 짤라서 봐야할 때가 있다. 코드가 크기 때문에 파다보면 길을 잃을수도 있다. Appstraction에서 바라봐라 디자인 설계 추상화들의 인터랙티브를 먼저 보고, 디테일을 그..

24.03.07 운영체제

운영체제 10. 막간 : 메모리 관리 API 10.1 메모리 공간의 종류 C 프로그램이 실행되면, 두 가지 유형의 메모리 공간이 할당된다. 첫번째는 스택(Stack) 메모리라고 불리며 할당과 반환은 프로그래머를 위해 컴파일러에 의해 암묵적으로 이루어진다. 이러한 이유 때문에 때로는 자동 C automatic() 메모리라고 불린다. 함수를 선언하면 C프로그램에서 스택에 메모리를 할당한다. 함수에서 리턴하면 컴파일러는 프로그래머 대신에 메모리를 반환한다. 함수 리턴 이후에도 유지되어야 하는 정보는 스택에 저장하지 않는 것이 좋다. 오랫동안 값이 유지되어야 하는 변수를 위해 힙(heap) 메모리라고 불리는 두 번째 유형의 메모리가 필요하다. 모든 할당과 반환이 프로그래머에 의해 명시적으로 처리된다. void ..

24.03.05 퀴즈, 운영체제

퀴즈 1. 응용 프로그램을 구현할 때 multiprocess와 multithread 중 하나를 선택하는 기준은 어떤 것이 있는지 몇 가지 제시하세요. 선택 기준 안정성 vs 자원 사용 : 시스템의 안정성이 매우 중요한 경우, 멀티 프로세스가 선호된다. 리소스가 제한적인 환경에서는 멀티쓰레드가 더 효율적일 수 있다. 구현의 복잡성 : 쓰레드는 공유 메모리로 인해 동기화 문제가 복잡해질 수 있으므로, 개발자의 동시성 제어에 대한 이해도가 중요하다. 응답 시간 : 멀티쓰레드는 컨텍스트 스위칭이 빠르기 때문에, 더 빠른 응답 시간을 요구하는 경우 유리할 수 있다. 플랫폼 및 언어 지원 : 사용 중인 프로그래밍 언어나 플랫폼이 멀티쓰레드 또는 멀티 프로세스 중 어느 쪽을 더 잘 지원하는지도 중요한 요소가 될 수 ..

24.03.04 운영체제, 백준

운영체제 멀티 프로세서 스케줄링(Multi Processor Scheduling) 8.1 배경 : 멀티프로세서 구조 단일 CPU 시스템에는 하드웨어 캐시 계층이 존재한다. 캐시는 지역성(locality)에 기반한다. 지역성에는 시간지역성(temporal locality)과 공간지역성(spartial locality)의 두 종류가 있다. 시간적 지역성의 기본아이디어는 데이터가 한번 접근되면 가까운 미래에 다시 접근되기 쉽다는 것이다. 멀티프로세서 시스템에서 캐시를 사용하는 것은 훨씬 더 복잡하다. 캐시일관성(cache coherence) 문제가 생길 수 있다. 기본적인 해결책은 하드웨어에 의해 제공된다. 하드웨어는 메모리 주소를 계속 감시하고 항상 ‘올바른’ 순서로 처리되도록 시스템을 관리한다. 특히, 여..

24.03.03 운영체제, 백준

운영체제 6. 스케줄링 : 멀티 레벨 피드백 큐(MLFQ : Multi-Level Feedback Queue) 멀티 레벨 피드백 큐 스케줄러는 Compatible Time-Sharing System(CTSS)에 사용된다. MLFQ가 해결하려고 하는 기본적인 문제는 두 가지이다. 첫째, 짧은 작업을 먼저 실행시켜 반환시간을 최적화 하고자 한다. 둘째, 응답 시간을 최적화한다. 6.1 MLFQ : 기본 규칙 MLFQ는 여러 개의 큐로 구성되며, 각각 다른 우선 순위(Priority level)가 배정된다. 실행준비가 된 프로세스는 이 중 하나의 큐에 존재한다. MLFQ는 실행할 프로세스를 결정하기 위하여 우선순위를 사용한다. 높은 우선 순위를 가진 작업이 선택된다. 큐에 둘 이상의 작업이 존재 할 수 있다...

24.03.02 운영체제, 백준, PintOS

운영체제 5. 스케줄링 : 개요 5.1 워크로드에 대한 가정 프로세스가 동작하는 일련의 행위를 워크로드(Work load)라 한다. 워크로드에 대한 이해도가 높을수록 그에 최적화된 스케줄링 정책을 정교하게 개발할 수 있다. 우리는 시스템에서 실행 중인 프로세스 혹은 작업(job)에 대해 다음과 같은 가정을 한다 모든 작업은 같은 시간동안 실행된다. 모든 작업은 동시에 도착한다. 작업은 일단 시작하면 최종적으로 종료될 때 까지 실행된다. 모든 작업은 CPU만 사용한다.(즉, 입출력을 수행하지 않는다.) 각 작업의 실행시간은 사전에 알려져 있다. 5.2 스케줄링 평가 항목 스케줄링 정책의 평가를 위해 스케줄링 평가항목(Scheduling metric)을 결정해야 한다. 반환시간은 (turnaround tim..

Project 1. 주의 깊게 봐야 할 함수들

Project 1 init.c , init.h 커널 초기화 main() 함수가 존재한다. main()에서 무엇이 초기화 되는지 확인해야 한다. 여기에 자신만의 초기화 코드를 추가할 수도 있다. thread.c, thread.h 기본 쓰레드 작업의 대부분이 이러한 파일에서 수행 thread.h는 4개의 프로젝트 모두에서 수정할 가능성이 있는 구조 쓰레드를 정의한다. synch.c, synch.h 기본 동기화 기본요소 : 세마포어, 잠금, 조건 변수 및 Optimization barriers 4개 프로젝트 모두에서 동기화를 위해 이를 사용해야 한다. timer.c, timer.h 기본적으로 초당 100회씩 똑딱거리는 시스템 타이머다. 이 프로젝트에서 이 코드를 수정한다. pit.c, pit.h 8254 프로..

Study/PintOS 2024.03.03

24.03.01 운영체제, 백준, KEYWORD

운영체제 3. 제한적 직접 실행 원리(Limited Direct Execution) CPU를 가상화하기 위해서 운영체제는 여러 작업들이 동시에 실행되는 것처럼 보이도록 물리적인 CPU를 공유한다. 이러한 가상화 기법을 구현하기 위해서는 두 가지 문제를 해결해야 한다. 성능저하 제어문제 제어권을 유지하면서 성능 저하가 없도록 하는 것이 운영체제를 구축하는데 핵심적인 도전 과제이다. 3.1 기본원리 : 제한적 직접 실행 운영체제 개발자들은 프로그램을 빠르게 실행하기 위하여 제한적 직접 실행이라는 기법을 개발했다. 운영체제가 프로그램을 실행하기 시작할 때 프로세스 목록에 해당 프로세스 항목을 만들고 메모리를 할당하면 프로그램 코드를 디스크에서 탑재하고 진입점을 찾아 그 지점으로 분기하여 사용자 코드를 실행하기..

24.02.29 KEYWORD

24.02.29 KEYWORD KEYWORD Semaphore/Mutex 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 여러 개의 프로세스가 동시에 접근하면 Cirtical section 문제가 발생 할 수 있다. 이를 해결하기 위해 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식을 취해야 한다. 동기화 도구에는 대표적으로 뮤텍스와 세마포어가 있다. 세마포어_Semaphore 공유된 자원의 데이터 혹은 임계영역(Critical section)등에 여러 프로세스 혹은 쓰레드가 접근하는 것을 막아준다. 사용하고 있는 쓰레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다. 공유 자원에 접근할 수 있는 프로세스/쓰레드의 최대 허용치만큼 동시에..

728x90