목록분류 전체보기 (104)
눈팅하는 게임개발자 블로그
실행 대기중인 프로세스(스레드)중 하나를 선택하는 과정. CPU의 유휴 시간(CPU가 노는 시간)을 최소화하여 CPU의 활용률을 극대화한다. 컴퓨터 시스템 처리율의 향상을 목적으로 한다. CPU 스케줄링이 시행되는 4가지 경우 1. 스레드가 시스템 호출 끝에 I/O를 요청하여 Block될 때. 2. 스레드의 CPU 타임 슬라이스를 모두 소진하여 타이머 인터럽트가 발생할 때.. 3. 스레드가 자발적으로 CPU를 반환하여 새로운 스레드를 선택해야 할 때. 4. 더 높은 우선순위의 스레드가 요청한 입출력 작업이 완료되어 인터럽트가 발생할 때. 타임 슬라이스 커널이 스케줄을 단행하는 주기 시간. 스케줄 된 스레드에게 할당하는 CPU 시간. CPU는 타이머 인터럽트의 도움을 받아 타임 슬라이스를 단위로 스케줄링한..
프로세스 보조기억장치에 적재되어 있던 프로그램이 실행을 위해 메모리에 적재되어 코드, 데이터, 힙, 스택 메모리 영역을 할당 받아 프로세스가 된다. 프로세스의 Life Cycle 프로세스는 생성에서 소멸까지의 상태가 변하면서 Ready, Running, Terminated, Zombie, Blocked의 5가지 상태를 가질 수 있다. 프로그램이 최초 실행되어 메모리에 적재되면 언젠가 스케줄이 될 수 있도록 Ready 상태가 된다. 이후 스케줄되어 Running 상태로 변하여 프로세스가 실행되며. 프로세스 실행 중 다른 작업이 끝나길 기다리거나 IO 입출력이 실행되면 Blocked 상태로 변해 대기하게 된다. 이후 프로세스가 완료되거나 종료되면 Terminated/Zomibe 상태가 되어 종료 코드를 남긴..
Thread 개념이 나타난 배경 프로세스가 작업 단위로서 사용 되기에 여러 단점들이 존재함. - 프로세스 생성에 드는 비용이 크다. 프로세스를 위한 메모리를 할당하고, PCB(Process Control Block)를 생성하고, 페이지 테이블 생성하는 등 프로세스를 생성하는 시간의 오버헤드가 크다. - 프로세스 컨텍스트 스위칭에 드는 비용이 크다. CPU와 PCB 사이의 컨텍스트 교환에 드는 비용이 크고. 페이지 테이블 전환(TLB 등)에 따른 지연 시간이 길고, CPU 캐시 변경 등에 드는 비용이 크다. - 프로세스 사이 통신의 어려움 프로세스들은 완전히 독립적인 주소 공간을 가지고 있기 때문에 두 프로세스 사이에 데이터를 주고 받기 위해서는 제 3의 공간이나 특별한 방법이 필요. IPC를 이용할 경우..
Context 프로그램이 실행 중인 상황에 대한 정보. 메모리 : 프로세스가 할당 받아 사용 중이던 메모리에 대한 정보 CPU 레지스터들의 값 : PC, SP, AC등 레지스터들이 가지고 있는 값들에 대한 정보 Context Switching 현재 실행중인 프로그램의 실행을 중지하고 다른 프로그램을 실행하도록 하는 작업. 현재 실행중인 프로그램의 Context를 다른 곳에 복사하여 저장하고 실행시키고자 하는 프로그램의 Context를 가져온다. Thread Switching 현재 실행중인 스레드를 중단 시키고, 다른 스레드에게 CPU를 할당하여 실행시키는 과정 현재 CPU의 컨텍스트를 현재 스레드의 TCB(Thread Control Block)에 저장하고 스위칭 할 스레드의 TCB에 저장된 컨텍스트를 C..
시스템 호출은 사용자 응용 프로그램이 운영체제에 무언가를 요청할 때 사용하는 인터페이스이다. 사용자 공간과 커널 공간 프로세스에게 할당되는 메모리 공간은 사용자 공간과 커널 공간으로 나뉘어져 있다. 사용자 공간은 각각의 프로세스에 할당된 공간이며. (프로세스의 개수만큼 존재한다.) 커널 공간은 운영체제(커널)를 위해 할당된 공간으로 한 운영체제 내의 모든 프로세스가 자신에게 할당 된 커널 공간이 있는 것처럼 운영되지만 실제로 커널 공간은 한 개만 존재하고, 모든 프로세스가 이를 공유한다. CPU 내에 모드 레지스터라는 것이 존재하며, 이 레지스터의 비트가 0일 경우 사용자 모드. 1일 경우 커널 모드가 되는데. 표준 라이브러리의 코드가 실행될 경우 모드 레지스터의 비트가 0인 상태로 프로세스가 사용자 공..
컴퓨터 시스템은 3개의 계층 구조를 가진다. 응용 프로그램 소프트웨어 운영체제 소프트웨어 컴퓨터 하드웨어 레이어를 가지며 운영체제가 상, 하위 계층의 중간에 위치하여 사용자가 컴퓨터 하드웨어에 대해 자세히 모르더라도 컴퓨터를 쉽게 사용할 수 있도록 돕는 역할을 한다. 응용 프로그램과 운영체제 사이의 인터페이스로는 시스템 호출(System Call)이 있으며 운영체제와 컴퓨터 하드웨어 사이의 인터페이스로는 인터럽트(Interrupt)가 있다.
메모리 계층 보조기억장치 : 엄청 느림, 대용량, 전원이 없어도 데이터가 저장됨. 주 기억장치 : 느림, 전원이 있어야 동작함(데이터가 저장되지 않음) 캐시 메모리 : 빠름, 용량이 매우 적음, 프로세서(CPU)에 액세스 가능. 메모리 접근 시간 비율이 대략적으로 캐시 : 주 기억장치 : 보조기억장치 = 1 : 10 : 1000 이라고 한다. 계층 구조를 나누는 이유 전체 메모리 시스템의 가격을 최소화 하면서 가능한 한 최고의 평균 접근속도를 달성하기 위해. 기본적으로 저장 용량과 접근 시간의 Trade Off이다. Cache Memory 캐시는 하드웨어로 구현된 해쉬 테이블과도 같으며 캐시 메모리의 동작 개념은 참조의 국한성을 기반으로 한다. 참조의 국한성이란 대부분의 프로그램에서 일정 시간 동안의 메..
Hazard 명령어 파이프라인이 정상적인 동작에서 벗어나게 되는 요인 Structual Hazard 자원 충돌이 원인이 되어 발생하는 Hazard. 두 세그먼트(파이프라인 공정)가 동시에 하나의 메모리에 접근할 때 발생. 위의 예시에서는 MEM Step과 IF Step이 같은 메모리를 공유하는 경우 i + 3에서 IF가 해당 메모리에 액세스하려 했으나 이전의 MEM이 사용하고 있었으므로 한 Clock이 밀리게 된다. 해결 방법 - 하드웨어 자원의 복제/분리. - 명령어 메모리와 데이터 메모리를 분리. - 메모리나 레지스터의 입출력 버스를 분리. Data Hazard 데이터 의존성이 원인이 되어 발생하는 Hazard. 특정 명령어가 이전 명령어의 결과에 의존하여 수행되는데, 그 값이 아직 준비되지 않았을 ..
컴파일 된 소스 코드로 실행 파일 한 줄 한 줄의 명령어를 Instruction이라 한다. 프로그램을 실행한다 함은 프로그램 안에 있는 여러 Instruction을 차례대로 수행하는 것을 의미한다. Instruction은 크게 3종류로 구분된다. Memory-reference Instruction : 메모리를 참조하는 명령어 Register-reference Instruction : 메모리를 참조하지 않고 현재 레지스터의 값으로만 연산하는 명령어 I/O Instruction : 입출력과 관련된 명령어. Instruction Code (명령어) Instruction Code는 세 부분으로 나뉜다. Operation Code Field : 어떤 Operation을 수행할 것인가를 나타내는 부분. Addres..
Register CPU가 연산을 하기 위해 필요한 데이터를 저장하는 CPU 내부의 수십 개의 작은 저장 장소. 컴퓨터의 처리장치 중 속도가 가장 빠르다. (레지스터 > 캐시 > 메모리 > 보조기억장치 순) n개의 Filp/Flip으로 구성되어 있는데 예를 들면 32비트 레지스터는 32개의 Flip/Flop으로 구성된다. Word의 비트에 따라 연산을 수행한다. CPU 내부의 주요 레지스터로는 MAR, PC, IR 등이 있다. MAR(Memory Address Register) : 메모리의 주소를 저장하는 레지스터 PC(Program Counter) : 다음에 수행될 명령어의 위치를 저장하는 레지스터 IR(Instruction Register) : 현재 수행중인 명령어를 저장하는 레지스터 AC(Accumu..