일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 파일시스템 구현
- 락
- DirectX12
- 백준
- 병행성 관련 오류
- 스케줄링
- 영속성
- 다이나믹 프로그래밍
- 프로그래머스
- 자료구조
- 운영체제
- Direct12
- 컨디션 변수
- 렌더링 파이프라인
- 디자인패턴
- 동적계획법
- 그리디 알고리즘
- directx
- 타입 객체
- OS
- I/O장치
- 그리디알고리즘
- 멀티쓰레드
- 다이나믹프로그래밍
- DirectX 12
- 병행성
- codility
- 쓰레드
- 멀티프로세서
- Today
- Total
목록OS (38)
기록공간

RAID는 왜 사용하는 것인가? 서버 사용자가 서버 운영에 있어 가장 당혹스러울 때는 하드디스크 장애로 인한 데이터 손실일 것이다. 하드디스크는 사실상 소모품이며 I/O 작업이 많은 서버에서는 고장이 잦은 것이 당연하다고 할 수 있다. 하지만 서버에 저장되는 데이터의 경우 손실 또는 유출되는 경우 치명적인 것이 대부분일 것으로 대표적으로는 은행과 같은 금융, 군사적 목적의 데이터가 있을 것이다. 이로 인해 백업이 절대적으로 필요한 경우가 있을 것이며, 디스크 용량을 증설하려고 할 때 데이터 손실이 없어야 하는 경우가 있을 것이다. 그래서 많은 서버 관리자는 RAID 구성을 통해 하드디스크 가용성을 높이고 서버 데이터의 안정성을 확보해야 한다. RAID? RAID는 Redundant Array of Ine..

여타 자료 구조들과는 다르게 파일 시스템의 자료 구조는 안전하게 저장되어야 한다. 즉, 장시간 사용 후에도 유지되어야 하며 전력 손실에도 하드 디스크나 플래시 기반 SSD 장치의 데이터는 손상 없이 유지되어야 한다. 파일 시스템이 가진 가장 큰 어려움은 전력 손실이나 시스템 크래시가 발생하는 상황에서도, 어떻게 안전하게 디스크 상의 내용을 갱신하는가에 대한 문제이다. 전력 손실이나 크래시 때문에 디스크 상의 자료 구조를 안전하게 갱신하는 것은 상당히 까다로운 작업이 된다. 파일 시스템은 크래시일관성(crash-consistency) 이라는 새롭고 흥미로운 문제에 직면하게 된다. 문제를 이해하는 것은 어렵지 않다. 어떠 특징 작업을 위해 디스크 상에서 두 개의 자료 구조 A와 B를 갱신해야 한다고 해 보자..

파일 시스템은 순수한 소프트웨어다. 이점은 앞부분에서 다룬 CPU 가상화, 메모리 가상화 부분과 다른 점이다. CPU 가장화나 메모리 가상화에서는 하드웨어가 필요하다. (특권 모드로의 변환을 위한 명령어, 페이징을 위한 하드웨어 등이 그것이다) 파일 시스템의 종류는 매우 다양하다. 모든 파일 시스템들이 서로 다른 자료 구조를 가지고 있으며 각각은 장단점이 있다. 여기서는 간단한 파일 시스템 (Very Simple File System, vsfs)을 사용하여 개념을 소개하고, 파일 시스템에 대한 사례들을 다루며 현실에서 어떻게 동작하는지 이해해 보도록 하겠다. 생각하는 방법 파일 시스템에 대해 학습할 때, 두 가지 측면에서 접근할 것을 권장한다. 그 두 측면을 다 이해하게 되면 파일 시스템이 기본적으로 어..

파일과 디렉터리 저장 장치의 가상화에 대한 두 가지 주요 개념이 개발되었다. 첫 번째는 파일이다. 파일은 단순히 일거나 쓸 수 있는 순차적인 바이트의 배열이다. 각 파일은 저수준의 이름을 갖고 있으며 보통은 숫자로 표현되지만 사용자는 그 이름에 대해서 알지 못한다. 이 저수준의 이름을 아이노드번호(inode number)라고 부른다. 앞으로 이 아이노드번호에 대해서 더 자세히 살펴볼 것이다. 대부분 시스템에서 운영체제는 파일의 구조를 모른다. (예를 들면 어떤 파일이 그림인지, 또는 C 코드인지) 파일 시스템의 역할은 그러한 데이터를 디스크에 안전히 저장하고, 데이터가 요청되면 처음 저장했던 데이터를 돌려주는 것이다. 하지만 이렇게 하는 것은 보기보다 쉽지 않다. 두 번째 개념은 디렉터리이다. 파일과 마..

이번 글에서는 Redundant Array of Inexpensive Disk 또는 RAID라고 더 잘 알려진 기술을 소개한다. 이 기술은 여러 개의 디스크를 조화롭게 사용하여 고속이면서 (디스크의 일부가 고장나더라도) 대용량의 신뢰할 수 있는 디스크 시스템을 가능케한다. RAID란? 외면적으로는 RAID는 하나의 디스크처럼 보인다. 읽거나 쓸 수 있는 블럭의 그룹으로 보인다. 안을 들여다보면 RAID는 여러 개의 디스크와 메모리, 시스템을 관리하기 위한 하나 또는 그 이상의 프로세서로 이루어진 복잡한 기계이다. RAID의 하드웨어는 컴퓨터 시스템과 매우 유사하며 디스크의 그룹을 관리하기 위한 전용 시스템이다. RAID는 단일 디스크에 비해 여러 장점들을 제공한다. 그 중 하나는 성능이다. 디스크 여러 ..

이 장에서는 하드 디스크 드라이브에 대해 더 자세하게 알아보고자 한다. 이런 드라이브들은 수 세기 동안 대부분 컴퓨터 시스템의 영구적이 데이터 저장소였으며 파일 시스템 기술은 거의 대부분 하드 디스크 드라이브의 동작에 기반을 두고 설계되었다. 그렇기 때문에 파일 시스템 SW를 구현하기 전에 디스크의 상세한 동작을 이해하는 것이 중요하다. 인터페이스 모든 현대 드라이브의 기본적인 인터페이스는 단순하다. 드라이브는 읽고 쓸 수 있는 많은 수의 섹터(512Byte 블럭)들로 이루어져 있다. 디스크 위의 n개의 섹터들은 0부터 n-1까지의 이름이 붙어 있다. 그렇기 때문에 디스크를 섹터들의 배열로 볼 수 있으며 0부터 n-1이 드라이브 주소 공간이 된다. 멀티 섹터 작업도 가능하다. 사실 많은 파일 시스템들이 ..

먼저 입력/출력 장치의 개념을 소개하고 운영체제가 이 장치들과 상호 작용하는 방법을 알아보도록 하겠다. 당연한 얘기지만, I/O는 컴퓨터 시스템에서 상당히 중요한 부분이다. 컴퓨터 시스템을 유용하게 쓰려면 입력과 출력이 모두 필요할 것이기 때문이다. 그러면 운영체제에서는 I/O를 어떻게 시스템에 통합하는 것일까? 시스템 구조 위는 일반적인 시스템 구조를 그림으로 표현한 것이다. 이 그림에서는 CPU와 주 메모리가 메모리 버스로 연결되어 있다. 몇 가지 장치들이 범용 I/O 버스에 연결이 되어 있는데, 많은 현대의 시스템에서는 PCI(또는 많은 파생 버스들)를 사용하고 있다. 그래픽이나 다른 고성능 I/O 장치들이 여기에 연결될 수 있다. 마지막으로, 그 아래에는 SCSI나 SATA 또는 USB와 같은 주..

GUI 기반 프로그램이나 인터넷 서버에서는 다른 스타일의 병행 프로그래밍이 사용된다. 이런 스타일을 이벤트 기반의 병행성(event-based concurrency)이라 한다. node.js와 같은 서버 프레임워크에서 사용되지만, 시작점은 지금부터 다룰 C와 유닉스 시스템이다. 이벤트 기반의 병행성은 두 개의 문제를 갖고 있다. 먼저 멀티 쓰레드 프로그램에서 이벤트 기반 병행성을 올바르게 사용하는 것이 매우 어렵다. 락을 누락시키거나, 교착 상태 또는 다른 골치 아픈 문제들이 발생할 수 있기 때문이다. 또 다른 문제는 멀티 쓰레드 프로그램에서는 개발자가 쓰레드 스케줄링에 대한 제어권을 전혀 갖고 있지 않다는 것이다. 개발자는 운영체제가 생성된 쓰레드를 CPU들 간에 합리적으로 스케줄링하기만을 기대할 수밖..