일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- DirectX12
- I/O장치
- 영속성
- 동적계획법
- 타입 객체
- 디자인패턴
- directx
- 다이나믹프로그래밍
- 그리디알고리즘
- 스케줄링
- 프로그래머스
- 파일시스템 구현
- 멀티쓰레드
- OS
- 백준
- 쓰레드
- 다이나믹 프로그래밍
- 병행성 관련 오류
- 병행성
- 렌더링 파이프라인
- 알고리즘
- codility
- 그리디 알고리즘
- 자료구조
- 운영체제
- 컨디션 변수
- 락
- DirectX 12
- Direct12
- 멀티프로세서
- Today
- Total
목록OS (38)
기록공간

CPU 가상화 앞서 우리는 CPU의 가상화에 대해서 살펴보았다. 운영체제는 여러 개의 CPU가 존재한다는 환상을 제공하고 이는 프로세스 하나를 실행하고, 멈추고, 다른 프로세스를 실행하는 반복 과정인 시분할(Time Sharing)을 통해 이루어진다. 하지만 프로세스가 많아지면 CPU를 공유해야 할 대상도 많아지기 때문에 속도가 느려진다. 프로세스 앞에서 계속해서 프로세스라는 단어가 나왔는데, 도대체 무슨 뜻일까? 프로세스(Process)는 운영체제가 제공하는 핵심 개념 중 하나로 실행 중인 프로그램이다. 프로그램 자체는 생명이 없는 존재와 같다. 프로그램은 디스크 상에 존재하며 실행을 위한 명령어와 정적 데이터의 묶음일 뿐이다. 이것들을 읽고 실행하여 프로그램에 생명을 불어넣는 것이 운영체제이다. 프로..

설계 목표 가장 기본적인 설계 목표는 시스템을 편리하고 사용하기 쉽게 만드는 데 필요한 것들을 추상화시키는 것이다. 추상화는 컴퓨터 과학 모든 것의 근간이라고 할 수 있다. 추상화를 통해서 큰 프로그램을 쉬운 작은 부분들로 나누어 구현할 수 있다. 추상화는 어셈블리 코드를 몰라도 C언어와 같은 고수준 언어로 프로그램을 작성하는 것이 가능하게 해 주고, 더 나아가서 논리 게이트를 몰라도 어셈블리 코드를 작성할 수 있게 해 주며, 더더욱 나아가서는 트랜지스터에 대한 지식이 없어도 게이트를 이용하여 프로세서를 만들 수 있게 한다. 이렇게 운영체제는 추상화를 이용하여 사용자가 시스템을 쉽게 사용할 수 있도록 해준다. 기본적인 목표는 아니지만 운영체제를 설계하는데 가장 중요한 목표는 성능이다. 다른 말로는 오버헤..

RAM 같은 메모리는 휘발성(Volatile)이기 때문에 컴퓨터의 전원이 꺼지면 메모리에 있는 데이터를 모두 잃는다. 즉, 데이터가 영구적이지 않다. 그래서 컴퓨터에는 전원이 꺼지더라도 데이터가 보존되는 영구적인 데이터를 저장할 수 있는 하드웨어와 소프트웨어가 필요하다. 이런 것을 가능하게 해주는 하드웨어는 하드디스크나 SSD 같은 비휘발성 I/O(Input Output) 장치이고, 소프트웨어는 사용자가 생성한 파일들을 관리하는 파일 시스템(File System)이다. 파일 시스템의 모든 작업은 운영체제가 한다. "Hello World!"를 파일에 저장해보자. #include using namespace std; int main() { char mess[] = "Hello World!"; ofstream..

운영체제는 여러 가지 일을 동시에 수행하고 있다. 프로세스를 하나 실행하고, 다음 프로세스를 실행하고, 또 다음 프로세스를 실행하고... 이 동작을 반복한다. 마치 곡예사가 여러 물건을 저글링 하는 것처럼 말이다. 병행성 문제 현대의 멀티스레드 프로그램은 병행성 문제를 추가로 갖고 있다. 다음 코드를 한번 보자. #include #include using namespace std; volatile int counter = 0; int loops; // 카운터를 증가 시키는 작업을 하는 함수 void worker() { for(int i = 0; i < loops; ++i) ++counter; } int main() { // 두개의 스레드를 만든다. thread p1, p2; cout

Ctrl + Alt + Del를 눌러 작업 관리자를 실행해보자. 그러면 많은 프로그램이 실행되고 있을 것이다. CPU는 하나이기 때문에 여러 프로그램에 대한 연산 처리는 불가능하다. 결국 어떤 프로그램을 실행시키기 위해서는 전에 실행되고 있던 프로그램에서 CPU를 양보해야 한다. 그럼 이러한 작업은 어떻게 가능한 것일까? 여러 프로그램을 실행 시키기위해 컴퓨터에는 마치 수십 개의 CPU가 존재하는것 처럼 보이게 한다. 이것이 바로 CPU 가상화이다. CPU 가상화는 가상의 CPU가 여러 개 있는것과 같은 효과를 낸다. 즉, CPU를 무한한 개수의 CPU로 증식시킬 수 있다는 것이다. 프로그램을 실행하고, 멈추고, 어떤 프로그램을 실행시킬 것인가를 운영체제에게 알려주기 위해서는 원하는 바를 운영체제에게 전..
운영체제(Operating System)를 들어가기 전에 왜 필요한지에 대해서 알아야 할 것이다. 운영체제를 알아햐 하는 이유 바로 좋은 프로그래머가 되기 위해서이다. 좋은 프로그래머는 자기가 만든 프로그램이 컴퓨터에서 어떻게 수행되는지를 아는 것이다. 그러면 궁금증이 생길 것이다. "그냥 구현만 잘하면 되지 그딴 것을 왜 알아야 하는가?"라고 말이다. 왜 알아야 하는지에 대해서는 두 가지로 설명할 수 있다. 첫 번째로 속도가 느리거나, 이상한 버그가 발생했을 때 대처가 가능하다. 보통 개발 상황에서는 느끼기 힘들 수도 있지만, 시스템 콜이 많이 발생하는 프로그램을 개발한다고 했을 때에는 확실히 운영체제가 도움이 될 수 있다. 시스템 콜은 운영체제에서 담당하기 때문이다. 나는 네트워크 프로그래밍을 할 때..