본문 바로가기

전체 글41

Operating System - Ch10. Virtual memory 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번 챕터에서는 Virtual memory에 대해서 알아보자. Virtual memory의 기본 개념은 Secondary Storage와 Physical memory 간의 "Swap", 그리고 이론상 무한한 양의 메모리를 사용할 수 있도록 하는 것이다. 아출발 이 그림을 통해 알 수 있듯이, virtual memory를 잘 사용하면 physical memory의 크기보다 훨씬 큰 양의 메모리를 사용할 수 있다. 이것이 가능한 이유는 바로 디스크의 일부분을 메모리로 생각하고 사용하기 때문이다. Physical memory에 Free frame이 더이상 없어 새로운 프로세스가 왔을 때 곤란해진다. 이 때 disk를.. 2022. 6. 16.
Operating System - Ch09. Main memory 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 메모리는 아주 비싼 자원이다... 그래서 아주 잘 사용해야하고, 아껴 쓰고, 효율적으로 사용해야한다. 그렇다면 메모리 관리는 어떻게 해야할까? 이에 대해서 Ch09에서 알아보자. 메모리 관리에 있어서 중요한 이슈들 옛날 배치 시스템에서는 별 중요한 요소는 아니었다만... 멀티프로그래밍 환경이 찾아오면서 메모리 관리가 매우 중요해짐. - 여러 프로세스에 대한 지원 - 실제 Physical memory보다 더 큰 용량을 가지는 프로세스도 지원할 수 있어야 한다. - 메모리 자원 보호 - 메모리 자원 공유 - 성능 Virtual Memory (VM) Virtual memory는 메모리를 만들어서 physical me.. 2022. 6. 16.
Operating System - Ch08. Deadlock 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 생각하는 철학자 알고리즘에서 서로가 서로를 기다리는 데드락 문제가 발생하는데, 데드락에 대해서 알아보자. 데드락이란 자신이 어떤 자원을 사용하고자 할 때 그 자원이 다른 누군가가 사용중이라면, 그 자원을 쓸 수 있을 때까지 대기하는데 그 대기가 영원히 지속되는 것을 말한다. 결국에는 모든 프로세스가 하나의 프로세스의 이벤트를 기다리는 총체적 난국의 상황이 된다. 데드락이 발생할 네 가지 충분 조건은 다음과 같다. 넷 모두 만족하면 데드락이 발생함. 1. Mutual exclusion (상호배제): 동시에 오직 하나의 프로세스만 자원을 사용할 수 있다. 멀티 프로세스 환경에서 필연적으로 발생하는 경우. (mute.. 2022. 6. 1.
Operating System - Bootstrapping PC의 전원 버튼을 누르면 메인보드의 전원 단자가 쇼트가 나면서 파워에 불이 들어온다. 1. CPU 초기화 및 BIOS 로드 제일 먼저 CPU가 스스로를 초기화하고 고정되어 있는 주소인 0xffffffff0에 있는 instruction을 수행. 여기에는 뭐가 있지? BIOS가 있다. (Basic Input Output System) CPU가 가장 먼저 수행하는 명령어가 저장되어있는 주소에 BIOS가 있다는 것. 전원이 꺼져도 데이터가 살아있어야 하니 ROM에 저장됨. 2. BIOS의 하드웨어 검사 BIOS/UEFI로 jump한다. CPU는 앞서 초기화하면서 점검을 마쳤고, CPU를 제외한 나머지 필수 요소(Memory, GPU, I/O devices...)들이 정상적으로 저장되어 있는지를 체크한다. 이를.. 2022. 6. 1.
Operating System - Ch07. Synchronization example 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 챕터 6에서는 동기화 문제에 대한 이야기를 여럿 했었다. 이번 챕터에서는 프로세스 동기화 예시에 대해서 알아보자. Typical Sychronization Problems... 보통 Semaphore로 해결할 수 있고, Mutex lock과 Condition variables로 해결할 수도 있다. 1. Bounded-Buffer Problem (한정 버퍼 문제, Producer-Consumer problem) 공유 자원을 두 프로세스가 동시에 이용하기 때문에 꼬이는 문제. Race condition이라고 함. // 생산자 코드 void Producer(data) { while(count == N) {}; buf.. 2022. 6. 1.
UE4) C++코드로 간단한 State machine 구현해보기 먼저 TickStateMachine 함수를 만든다. (activeState는 AEnemy 클래스의 상태를 저장하는 Enum 클래스임.) 이 함수는 Tick()함수에서 매 프레임 실행되는 함수로, 각 상태마다 switch문을 통해 구별해서 함수를 실행함. void AEnemy::TickStateMachine(float deltaTime) { switch (activeState) { case State::IDLE: StateIdle(); break; case State::CLOSE: StateClose(); break; case State::FAR: StateFar(); break; case State::MELEE_ATTACK_01: StateMeleeAttack01(); break; case State::.. 2022. 5. 30.
UE4) 느린 Intellisense 속도를 높이는 법 언리얼엔진을 쓰다보면 Intellisense가 참 뭐같다. :( 인텔리센스에 센스를 더해보자. 프로젝트 속성에 들어가서 NMake - 추가 옵션 (Additional Options)에 /Yu를 추가해주면 된다. /Yu를 추가 옵션에 넣으면 Intellisense에 pre-compiled된 헤더파일을 생성해 사용해서 더 빠른 Intellisense를 사용할 수있다. 22/11/27 추가 - Resharper가 훌륭한 도구인 것 같다... 너무 편하다! 2022. 5. 10.
Operating System - Ch03. Process 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! "시험공부하면서 작성중" Program: 디스크에 존재하는 실행 가능한 파일 (.exe), 메모리에 로드되면 프로세스가 된다. 정적입니다. Process: 프로그램이 실행된 상태. 스레드 이전에는 스케줄링의 기본 단위였다. 커널이 process ID(PID)를 통해 프로세스를 관리한다. (Table 이용) 프로그램을 실행하게 되면 프로그램의 복사판인 프로세스를 만들어 메모리에 올리는 것. 동적인 존재입니다. Text (code): 실행할 코드의 모음 Data: 전역 변수들 Heap: 프로그램 실행 시 동적으로 할당되는 메모리 Stack: 함수 수행을 위해 사용되는 임시 저장소, 함수가 실행되면 데이터가 쌓였다가.. 2022. 4. 27.
Operating System - Ch05. CPU Scheduling 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번에는 CPU 스케줄링에 대해서 알아보자. CPU Scheduler: 어떤 녀석에게 CPU자원을 사용할 권한을 줄 것인가를 결정함 CPU burst: I/O 연산이 아닌 CPU연산을 중심으로 하는 구간 I/O burst: I/O 요청을 위해서 기다리는 구간 (I/O wait) CPU-bound process: CPU burst의 비율이 높은 녀석, 연산이 많이 필요한 경우. 단순하면서 높은 성능을 내도록 설계 ex) 슈퍼컴퓨터, Simulation I/O-bound process: I/O burst의 비율이 높은 프로세스, 네트워크 통신이나 로컬 파일과 동작하는 경우가 많을 때. 컴퓨터와 유저간의 응답성이 중.. 2022. 4. 21.
Operating System - Ch.04 Thread & Concurrency 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! Process란 "실행 중"인 program을 의미한다 Program은 디스크에 그냥 있는 상태. 작성된 프로그램이 메모리 공간을 할당받고 실행중인 상태. 음... Process는 좀 무겁네... address space도 크고,, PCB 크기도 크고... OS 자원도 너무 많이 먹어... 많은 데이터와 많은 저장공간이 필요하네... 또 여러 프로세스 돌리면서 스케듈링할 때 생기는 오버헤드도 있고... 프로세스끼리의 소통이 커널을 통해 이루어지니까 좀 비싸다... 어떻게 해결 안되나? 하나의 단일 process 안에서 여러 execution path를 만들면 가볍게 동작하지 않을까? 그리하여... ★Thread.. 2022. 4. 19.