지난 포스트에서 이야기 했던 것처럼 Process에는 각각의 상태를 나타내는 state가 존재하고 이를 OS level에서 처리하기 위해 필요한 정보를 모아놓은 Process Control Block을 운용한다고 했다. 그 때 얼핏 나왔던 이야기가 Process는 여러개 존재하지만 CPU는 한번에 한 instruction만 수행할 수 있다고 했었다. 이 말을 다르게 표현하면 각 Process마다 정해진 규칙에 따라서 수행되어야만 system Resource를 효율적으로 처리할 수 있다는 것이다. 결국 Process state에 따라서 어떤 scheduling 방식을 취하냐는 CPU의 Utilization에도 영향을 미친다는 말이 된다. 당연히 우리가 할려는 효율적인 Multi Programming을 위해..
Process가 뭘까?OS상에서 Process는 Program의 실행단위라고 책에 정의되어 있다. 그런데 사실 이 말만 들으면 Process는 어디서부터 생성되는 것이며, 어떤 형태를 갖추고 있는지는 알 수가 없다. 그냥 막연하게 Program을 실행시키기 위해서는 Process가 있어야 되는구나 라고만 이해가 된다. 그러면 일단 Process가 수행되는데 필요한 내용에 대해서 고민해보는 것이 필요하다. 어차피 프로세스가 수행되기 위해서는 내부적으로 CPU가 instruction을 수행해야 될 것이고, 매 clock마다 다른 instruction을 수행하기 위해서는 어딘가에서 그 instruction에 관련된 내용을 지속적으로 업데이트해줘야 할 것이다. 보통 instruction은 Memory나 Regi..
POSIX는 IEEE에서 만든 운영체제와 관련한 규약이다. Portable Operating System Interface의 준말이고 보통 Unix 체계에서 고려되면서 만들어졌기 때문에 끝에 X를 붙인다. 당연한 이야기이겠지만 컴퓨터 세상에는 다양한 운영체제들이 존재한다. 물론 그 뿌리는 AT&T에서 개발된 Unix에서 내려온 것이긴 하지만, 사용자에 적합에게 수정이 되면서 그 종류가 많아졌다. 이 때문에 발생하는 문제가 바로 호환성이다. 같은 뿌리에서 내려왔다 하더라도, 어떤 OS에는 의존성이 성립하고, 어떤 OS에서는 성립하지 않는 경우가 발생하기 때문에 응용 프로그램의 실행이 보장되지 않았다. 물론 일반 사용자야 그냥 OS를 지웠다가 다시 설치하는 번거로움을 거치면 되지만, 그 단위가 기업이나 정부..
컴퓨터의 구성 요소를 들어보라면 많은 것들을 들어볼 수 있다. 물론 가장 중추적인 역할을 하는 CPU를 필두로 저장장치, 입출력 장치를 들 수 있지만, 컴퓨터 본연의 역할을 하기 위해서는 Memory의 역할이 중요하다. 더구나 CPU도 내부에 들어있는 ALU를 사용하기 위해서는 메모리에서 인자를 받아와야 한다. 모든 장치들이 상호유기적으로 영향을 주기는 하지만 메모리도 CPU만큼 컴퓨터 내에서 차지하는 비중은 크다고 생각한다. 아무튼 이 메모리의 역할은 앞에서 언급한 것처럼 CPU가 연산하는데 필요한 데이터를 제공하는 것이다. 더 풀어쓰자면 CPU가 연산을 하기 위해서는 사용자가 어떤 연산을 원하는지를 지시하는 Operation Code(opcode)와 data를 담고 있어서 필요할 때마다 호출할 수 있..
Mint64OS를 구현할 때 MultiTasking이나 MultiThreading에 관한 내용을 다뤘지만 그 개념에 대해서 더 자세히 다뤄볼 필요가 있을 듯 해서 정리한다. 사용자가 PC를 사용한다는 것은 다르게 표현하면 사용자가 원하는 서비스를 호출해서 디바이스들이 상호 유기적으로 수행한다고 할 수 있다. 그런데 사용자가 원하는 서비스는 PC가 만들어진 시점에서는 아무런 정의가 되어 있지 않기 때문에 바로 사용할 수 없다. 어딘가에 정의되어 있는 서비스들을 호출할 수 있으면 그 때부터는 PC를 다룬다 라고 표현할 수 있을 듯 하다. 이렇게 보통 그 어딘가 라고 하는 것은 메모리가 대부분을 차지하고 있으며, 이렇게 메모리 상에 정의된 서비스 호출에 따른 과정을 task라고 할 수 있다.조금 비약적으로 예..
Kernel이란 Application과 Hardware를 연결시켜주는 역할을 한다. 어차피 Application이나 CPU Memory같은 Hardware는 독립적으로 동작하지 못하고, 커널을 통해서 서로 의사소통을 하기 때문에 어찌보면 커널의 역할은 OS에서 가장 중요한 요소로 작용한다. 우리가 흔히 쓰는 윈도우에도 Windows NT라는 커널이 들어있다. 이 커널을 통해서 OS는 사용자가 요구하는 서비스를 호출할 수 있는데 이걸 System Call이라고 하고, 보통 System Call로 Process Control, File Management, Device Management, Information Maintenance, Communication 등의 기능을 수행할 수 있다. 그런데 잘 보면 K..
제대로 알고 있는 건지는 모르겠지만 논문 발표시 포함해야 될 내용이라 개인이 알아보기 쉽게 정리하고자 한다. Copy On Write란 말 그대로 작성시 이전의 내용을 Copy한다는 내용을 담고 있고, 보통 Optimization 기술중 하나로 쓰이고 있다. 무언가 들으면 Backup과 같은 개념같아 보이지만 실제로는 컴퓨터상의 한정된 Resource를 서로 다른 두개의 프로세서가 공유할 때 유용하게 써먹을 수 있다. Resource가 개입되어 있기 때문에 실제로 이런 내용들은 Memory Management에서 적용된다. 개념은 다음과 같다. 분명 처리되고 있는 프로세스들 중에는 같은 Resource를 공유하는 경우가 종종 있다. 물론 각각이 Resource 영역을 두고 처리하는 것이 가장 이상적이겠지..
지난 포스트까지 멀티코어를 활성화시키는 예제를 따라했다. 그런데 사실 활성화만 시킨다면 의미가 없다. 프로세서가 인터럽트를 수행한다는 말은 직접적으로 인터럽트를 처리하는 것이 아니라 인터럽트가 다른 부분에서 처리하는 동안 context를 저장하고 Interrupt code에 따른 부분을 수행하고 다시 복원하는 작업을 수행하는 것이다. 그런데 이 저장/복원, 수행 과정은 프로세서에 일정 자원을 소모하는 것이기에 하나의 부하로 작용한다. 멀티코어 지원 OS라면 이런 작업을 여러 프로세서가 나눠서 효율적으로 처리할 수 있어야 하면, 보통 이런 것을 Interrupt Load Balancing이라고 한다. 이제는 활성화는 단계가 아닌 써먹을 단계가 되어야 하는 것이다. 지나간 내용을 다시 돌아보면 싱글코어에서는..
원래 다루는 책 이름 자체가 64비트멀티코어OS를 만드는것이 목적이다. 그래서 지금까지 초기 POST 후에 64bit 용 Kernel로 전환하고 그위에서 할 수 있는 여러가지 작업에 대해서 (램디스크나 시리얼 통신같은...) 예제 코드를 제공하고 있어서 그걸 따라해왔다. 옛날에 나온 싱글코어용 OS는 그냥 이전까지 한 내용을 바탕으로 GUI를 올리면 그냥 하나의 GUI Based OS가 된다. 하지만 요즘에 나오는 멀티코어로 전환하면 이전에 나온 싱글코어용 OS를 쓰기에는 너무 비효율적이다. 여기서 말하는 멀티코어는 보통 Multi Processor, Process를 처리할 수 있는 Processor가 여러개가 같이 있는 형태를 말하며, 다르게는 Core라고 할 수 있다. 멀티코어가 등장하기 전의 컴퓨터..
내가 Mint64OS를 만들고 있는 것은 Bochs라는 Emulator상에 OS를 올려 놓은 일종의 Virtual Machine이다. 사실 VMWare 같은 상업용 Emulator를 써보면 알겠지만 main과 VM 사이에 장치나 데이터의 이동이 원할하게 이뤄지는 것을 알 수 있다. 사실 어떻게보면 관건은 두개의 시스템 사이에 데이터를 어떻게 하면 주고 받을 수 있을까인데, 이 책에서 쓰는 방법은 바로 Serial Port를 TCP/IP로 묶어서 자기끼리 통신하게끔 하는 것이다. 네트워크 공부를 해본 사람은 알겠지만 네트워크안에서 밖으로 나가는 실제 IP가 있는가 하면, 자기 내부에서 통신을 할 수 있는 예약된 IP가 존재한다. 보통 이걸 LoopBack이라고 한다. 그래서 여기서도 LoopBack을 하면..
PC에 속해 있는 장치들 중에서 가장 더디게 발전하고 있는 분야 중 하나가 바로 hdd이다. 구형 컴퓨터라면 하드디스크에서 데이터를 불러올 때 엄청난 기계음과 함께 오랜 시간이 걸려야 수행이 되는 경험이 있을 것이다. 지난 번에 소개했던 대로 데이터의 탐색과정은 Access Arm을 이용해서 일일이 Cylinder/Head/Sector를 찾아가는 것이기 때문에 소음과 느린 현상이 발생하는 것이다. 결론적으로 가장 문제가 되는 것은 속도인 것이다. 이를 해결하기 위한 가장 근본적인 방법이 모든 하드디스크를 플래시 메모리로 바꾸는 것이고, 이게 요즘에 등장하고 있는 SSD이다. 물론 점차적으로 가격이 내려가고 있어서 몇년안에는 대중화가 될 듯하다. 아니면 빠른 RAM의 Access Time을 활용한 RAM ..
지난 포스트에서 다룬 내용은 그냥 빈 파일을 생성하고 그 파일이 제대로 hdd에 저장되는지를 확인해보았다. 하지만 저번에 잠깐 이야기 했다시피 프로그램이란 코드의 집합체이며, 그 말은 이전과 같이 빈 파일안에 코드라고 정의되어야 할 무언가가 들어있어야 한다는 것이다. 결국은 파일에 어떤 내용을 집어넣을 수 있어야 하고 그를 위해서 파일에 접근할 수 있는 입출력함수가 필요하다. C에서는 따로 stdio.h에서 파일의 입출력과 관련한 fopen()이나 fwrite(), fclose()같은 함수를 제공한다. 책에서도 이를 구현했다. 아무튼 이걸 구현하기 위해서는 따로 FILE과 DIRECTORY에 대한 자료구조가 필요하다. 당연히 파일입출력이기 때문에 검색에 대한 기능이 필요하며, 이를 위해서는 지난 포스트에..
지난 번 포스트에서는 하드디스크를 인식시키는 과정을 했다. 물론 그 과정만으로 데이터를 저장할 수도 있겠지만, 파일의 저장과 관리를 효율적으로 하기 위해서는 그 데이터 저장에도 원칙이 있어야 한다. 그 원칙이 File system이고, 몇년전까지만 해도 가장 일반적으로 쓰인 File system이 이른바 Table을 만들어서 관리하는 규약인 File Allocation Table (FAT) 방식이다. 여기서 등장하는 Table 의 Size에 따라서 뒤에 숫자가 붙는다. 예를 들어 FAT32인 것은 Table size가 32bit인 fileSystem인 것이다. *nix 규격에서는 따로 ext라는 file System을 사용한다. 이 책에서는 독자적으로 File system을 만들되 전체적으로는 Table..
Memory도 저장 매체이고, pc 구동에서 중요한 역할을 차지하지만 문제는 전원이 나가면 그 데이터가 없어진다는 것이다. 말그대로 휘발성이라는 것이다. 사람이 필요로 하는 작업의 특성상 데이터를 지속적으로 저장하고 유지할 공간이 필요한 것이고 오랫동안 그 역할을 하고 있는 것이 바로 HardDiskDrive다. 물론 요즘에는 SSD가 등장해 점점 점유율을 넓혀가고는 있지만 가격이나 용량적인 측면에서 대중화는 아직까지는 먼 듯 하다. 아무튼 지금 거의 쓰고 있는 컴퓨터에는 이 하드디스크가 들어가 있을 것이다. 하드 디스크의 내부에는 platter가 겹겹이 쌓인 Cylinder 형태를 취하고 있고, 특정영역에 대해 Access Arm이 데이터를 읽고 쓰는 방식을 취하고 있다. 그 특정영역에 접근하기 위해서..
컴퓨터에서 뭔가를 하려면 항상 메모리를 거쳐야 한다. 연산을 하는 본연의 능력은 프로세서가 가지고 있지만 그걸 읽어오고 저장하는 것은 메모리가 있기에 가능한 것이다. 물론 요즘에는 그런 메모리의 가격이 싸지고 개인이 사용하는 용량도 과거에 비해서 커졌지만 과거에는 이 메모리를 효율적으로 다루는 것, 소위 Memory Management가 무척 중요했다. 그중 어플리케이션의 동작을 위해서 동적으로 메모리를 할당받는 Dynamic Memory Allocation이 이번 절에서 다룬 주제였다. 분명 자신이 명령한 process를 수행하기 위해서는 일일이 Memory를 할당받아야 한다. 하지만 그렇게 하고 끝난 후에는 다른 task가 그 Memory 영역을 쓸 수 있도록 반드시 해제해줘야 한다. 컴퓨터에 장착되..
- Total
- Today
- Yesterday
- 강화학습
- Distribution
- Kinect SDK
- ColorStream
- Off-policy
- Variance
- 딥러닝
- Expression Blend 4
- Windows Phone 7
- DepthStream
- reward
- windows 8
- arduino
- ai
- Pipeline
- processing
- Policy Gradient
- End-To-End
- Offline RL
- Gan
- PowerPoint
- bias
- Kinect
- SketchFlow
- 파이썬
- 한빛미디어
- dynamic programming
- RL
- Kinect for windows
- TensorFlow Lite
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |