본문 바로가기

분류 전체보기43

Operating System - Ch12: I/O systems ㅇ본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! 이번 챕터에서는 I/O systems에 대해 알아보자. I/O 연산은 CPU의 I/O 명령에 의해 수행된다. CPU가 I/O 장치에게 명령을 내리는 방법에 따라 Direct I/O와 Memory-mapped I/O로 나뉜다. 하드웨어적인 관점으로 볼 때는 I/O device가 I/O 명령을 수행하는 방식에 따라 Programmed I/O, Interrupt, DMA(Direct Memory Access) 세 가지 방식이 있다. - Programmed I/O는 I/O 장치에서 처리한 결과를 CPU register에 직접 전달하는 방식이다. 이 때는 I/O 연산의 결과값이 작은 경우.(키보드나 마우스) - 그 결.. 2022. 6. 18.
Operating System - Ch11. Mass storage structure 본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...! Mass storage는 다음과 같은 것들이 있다. - HDD (Hard Disk Drive) - SSD (Solid State Disk) - RAM disk - Magnetic tape 이러한 저장장치를 연결하는 방법은 두 가지가 있다. Host attached: I/O 포트를 통해 붙인다. 컴퓨터를 조립할 때 SATA 케이블이나 M.2 슬롯에 넣는 물리적인 연결. - IDE: 우리가 PC에서 사용하는 인터페이스 - SCSI: 서버같이 신뢰성과 기능이 중요한 컴퓨터에 사용하는 인터페이스 Network attached: 네트워크를 통해 붙인다. - NAS(Network-Attached Storage): 4~5베.. 2022. 6. 18.
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.