* 이 글은 coursera에서 제공되는 HW/SW Interface 강의를 요약한 내용입니다. 이전 포스트들(Process, Virtual Memory관련)을 살펴보면서 알 수 있었던 것은 process가 실행되기 위해서는 Memory에 올라가야 되고, 자신만의 space를 가져야 한다는 것이다. 이런 동작들이 모두 memory에 연관되어있기 때문에 어떻게 하면 memory를 조금 더 효율적으로 사용할 수 있을까에 대한 의문이 생길 것이다. 이때문에 Dynamic Memory Allocation을 사용한다. 고정된 영역만 memory에 할당하는 static memory allocation과는 다르게 dynamic memory allocation은 프로세스가 돌아가는 runtime내에 영역의 크기를 알려..
*이 글은 Coursera에 공개되어 있는 HW/SW Interface 강의를 요약한 내용입니다. 이전에 다뤘던 내용을 토대로 간단한 메모리 구조를 살펴보려고 한다. 위와 같은 Virtual Memory와 Physical Memory 형태가 있다.Virtual Memory는 14 bit으로 되어 있고, Physical Memory는 12bit으로 되어 있다. 이전 포스트에서 언급한 내용이기도 하지만 Page Table에서 찾은 base address에 offset만 더한 형태로 Page Table Entry를 찾게 되므로 실제로 Virtual Page나 Physical Page가 가지는 Offset은 같다. 지금의 예시에선 Offset이 6bit으로 되어있는 것으로 보아서 Page size는 2^6 = ..
*이 글은 Coursera에서 제공되는 HW/SW Interface 강의를 요약한 내용입니다. 지금까지 다룬 virtual memory 관련 내용에 따르면 모든 process는 자신만의 virtual address space를 가지고, 필요할 때만 DRAM에 load 시켜서 일종의 cache처럼 사용한다고 했었고, 이를 위해서 mmu에 있는 page table을 사용한다고 했다.결국 그때도 한 이야기지만 virtual page 각각의 Physical DRAM 어디에든 allocate 될 수 있고, 여기서 process간에 page를 share하거나 protect 할 수 있다. 간혹 위의 그림처럼 Process 1과 Process 2상의 virtual page 2는 Physical page 6에 맵핑되어 ..
* 이 글은 coursera에서 진행되는 HW/SW Interface 강의를 요약한 내용입니다. 지난 포스트에서 Virtual memory를 왜 쓰는지와 Virtual memory를 쓰기 위한 mechanism인 indirection에 대해서 설명했다.거기서 언급한 내용 중에 용량 문제를 해결하기 위해서 virtual memory를 쓴다고 했었는데 이에 대해서 조금 더 다뤄보겠다. 사실 virtual memory는 disk에 저장되면서 필요할 때만 physical memory로 load되서 access가 된다. 그러면 상식적으로 생각할때 virtual memory 크기는 physical memory보다는 훨씬 클 것이다. 그러면 과연 이 많은 virtual memory속 data를 physical mem..
* 이 글은 coursera에서 제공되는 HW/SW Interface 강의를 요약한 내용입니다. Virtual Memory라는 말을 들어본 사람이라면 왜 이름에 Virtual 이 들어갔는지 궁금할 것이다. 말그대로 가상이라는 말인데, 우리가 하드웨어로 장착하는 DRAM말고도 또다른 영역이 존재하나 싶기도 하다. 그런데 그 필요성을 따지다보면 Virtual Memory가 왜 필요한지를 알 수 있지 않을까 싶다. memory는 byte로 구성된 아주 큰 array다. 그리고 각 array에 속해있는 element는 자기가 가지고 있는 address를 이용해서 읽거나 쓸 수 있었다. 이런게 옛날에는 당연하게 여겨지는 원칙이었지만 문제는 64bit addressing을 쓰게 되면서부터다. array의 eleme..
* 이 글은 Coursera에서 제공되는 HW/SW Interface 강의를 요약한 내용입니다. 지난 포스트에서 fork의 동작에 대해서 간단하게 소개했다. 그런데 그때도 이야기 했던 것처럼 fork는 단순히 현재 process의 copy만 새롭게 만드는 형태였다. 그래서 fork만 수행하면 process는 다음과 같이 생성된다. 지금의 예시는 만약 /usr/bin에 있는 ls 명령 실행시킬때 fork-exec 의 형태를 표현한 것이다. 이렇게 같은 stack, heap, data, code를 가진 child process가 생성된다. 그런데 계속 반복적으로 나오는 내용이긴 하지만 process는 program을 실행시키는 instance이기 때문에 code의 path가 /usr/bin/bash로 정해진..
* 이 글은 coursera에서 진행되는 HW/SW Interface의 강의 내용을 요약한 글입니다. 지난 포스트를 통해서 Process 가 뭔지 소개하고 process 가 concurrent 하게 실행될때 발생하는 context switching을 다뤘다. 일단 process 가 하는 일은 알았고, 프로그램이 실행되기 위해서는 instance인 process가 필요하다는 건 알았는데 이제 이걸 어떻게 생성할 지가 궁금해진다. 우선 linux system을 가정할 때 process 생성과정은 fork-exec 구조를 따른다.(물론 windows에서는 이런 형태가 아니다.) 그리고 이를 위해서 syscall인 fork()와 execve() 를 사용한다. 어떤 인자를 주느냐에 따라서 execvp()가 될 수..
* 이 글은 coursera에서 제공되는 HW/SW Interface 강의를 요약한 내용입니다. Process란 뭘까? 이 개념에 접근하기 전에 우리가 실행하길 원하는 프로그램들이 컴퓨터 내에서 어떻게 동작하는지를 살펴봐야 한다. 프로그램은 일종의 instruction을 모아둔 집합체이다. 우리가 프로그램을 만들기 위해서 high level language로 구현하는 코드들 역시 컴파일러를 거치게 되면 list of instruction set이 되게 된다. 그런데 단순히 이값이 변환되기만 해서는 프로그램이 실행되지 않는다. 정말로 프로그램을 실행하길 원한다면 해당 instruction들을 memory에 load를 시켜야한다. 막연하게 올려야 된다가 아니고 이렇게 프로그램과 CPU에서 Memory까지 실..
* 이 글은 coursera에 공개되어 있는 강의인 HW/SW Interface의 강의 내용을 요약한 글입니다. cpu의 역할을 뭘까? 당연히 사용자가 명령하는 것을 정해진 주기마다 수행한다. 그런데 사용자의 명령은 내부의 어떤 과정을 통해서 intruction이라는 개념으로 변환이 되고 이걸 읽고 실행하는 과정을 거치게 된다. 우리가 컴퓨터를 켜는 순간부터 끌때까지 말이다. 보통 이런 과정을 control flow라고 한다. 예를 들어서 linux kernel 내부에서 network 기능이 수행될때의 그림은 다음과 같이 표현된다. 아마 cs를 전공하는 사람이라면 초창기에 열심히 control flow 를 그리면서 프로그램을 설계하는 방법을 익혔을 것이다. 앞에 나온 그림처럼 cpu는 일정시간마다 나열된..
이상하게 우리나라 OS강의나 외국 OS강의의 서두에는 항상 위 시스템이 나온다. 위 시스템은 IBM에서 개발된 프레임워크인 System 360이다. 이게 큰 의미를 갖는 이유는 물론 최초로 application을 구동할 수 있는, 컴퓨터의 개념을 정립한 시스템인 것이다. 그런데 OS관점에서 보면 또다른 의미를 부여할 수 있는데 아마 Multiprogramming이 가능한 OS가 탑재되었다는 것이다. 이전에 나왔던 system은 Batch System이라고 해서 사용자가 프로그램의 시작전에만 설정하고 나머지는 시스템에서 알아서 돌아가는 시스템이었다. 즉, 프로그램의 구동중에는 사용자가 개입할 여지가 없다는 것이다. 요즘과 같이 작업관리자가 여러 프로그램을 메모리에 올리고 따로따로 구동하는 방식이 아니라 그..
요즘 공부하는 부분이 Core Migration 부분이다. 뭔가 신기하지 않나? Core Migration이면 Core간에 Data를 이식시켜서 어디서든 자신이 하고 있던 작업을 계속 할 수 있다. 물론 Core에서 Process를 수행하므로 다르게는 Process Migration이라고도 할 수 있겠다. 그런데 사실 Process Migration은 이미 리눅스 내에서 구현되어 있는 부분이다. 요즘에 나오는 컴퓨터들이 거의다 멀티코어 형태로 나오고 있고, 무언가 작업을 효율적으로 수행하기 위해서는 여러개의 코어가 동시에 Process를 수행하는 형태를 지향할 것이다. 이 상태에서는 코어끼리 Process를 Migration한다는 의미는 우리가 알고 있는 통째로 옮기는 방식이 아니라 간단하게 말해서 일을..
일전에 이런 내용을 다룬 적이 있다.2013/02/15 - [About School] - [Study] Task / Thread그 때 이야기 하기론 thread는 Process를 처리하는 일종의 Worker의 개념으로 설명했었다. 당연히 이 Thread가 여러개 있어서 concurrent하게 Process를 처리하는 구조인 MultiThread를 지향하는 방향이다. 물론 Process가 어떤 위치에 있느냐에 따라서 Thread의 중요성도 다를 것이다. 예를 들어 웹 브라우저나 워드프로세서같은 User Process를 처리하는 Thread 도 있을 것이고, 일반적으로 발생하는 Kernel Process를 처리하는 Thread도 있을 것이다. 물론 Kernel Process를 처리하는 Kernel Threa..
몇차례 걸쳐서 Process에 대한 내용을 다루고 있다. 실제로 우리가 쓰고 있는 OS상에서도 수많은 Process들이 상주해있으면서 user의 요구를 수행하고 있다. 그런데 우리가 돌리는 프로그램이 하나의 Process만이 수행하는 것은 절대 아니다. 상황에 따라서는 Process끼리 협력을 해서 수행하는 케이스도 발생한다. 예를 들어 지금 이렇게 글을 쓰는 과정도 network 과 관련한 Process와 Keyboard I/O와 관련한 Process가 동시에 수행되고 있기 때문에 온라인상으로 글을 올릴 수 있는 것이다. 보통 이럴 경우에는 system Resource를 같이 사용함으로써 효율적으로 처리할 수 있다. 이런 과정들을 뭉뚱그려서 Interprocess Communication (IPC)이라..
이전 포스트에서는 Process의 scheduling 과정을 살펴봤었고, 이번에는 어떤 과정을 거쳐서 Process가 생성되는지를 알아보려고 한다. 우선 이걸 다루기 전에 OS에서 Process가 어떤 구조를 가지고 있는지를 간단하게 살펴볼 필요가 있다. Process의 구조형태는 일종의 트리 형태를 지닌다. 다른 말로 표현하면 모든 node Process들은 parent와 child를 가진다는 것이다. 그런데 만약 그렇다면 가장 상단에 있는 node는 누가 만드는 것일까? 창조론을 믿는 건 아니지만, 그렇다고 형태가 있는 한 무에서 유가 창조된다고는 생각하지 않는다. Process Creation에서는 창조주역할을 하는 Process가 있다. 우리가 이전 포스트를 살펴보면서 PCB의 어딘가에는 서로 다..
컴퓨터가 수행할 수 있는 모든 데이터들은 저장장치에 있다. 그 저장장치 중에도 실제로 수행을 위해서는 RAM상에 load 되어야 한다. 이 RAM에 저장되어 있는 data를 cpu가 읽어오는데 보통 한번에 읽을 수 있는 가장 작은 단위를 cell이라고 한다. 모든 cell에는 integer형태의 address를 하나씩 갖고 있으며, 보통 한 개의 cell size는 1byte, 즉 8bit으로 정해져 있다. 즉, CPU는 cell의 주소를 넘겨주게 되면 그안에 있는 데이터를 읽어올 수 있게 된다. 그래서 보통 알고 있는 Byte Addressing 이라는 말은 cell의 주소를 byte 단위로 찾아가겠다는 말이다.그런데 이런식으로 한번에 Address를 처리하는 양을 작게 해버리면 매번 Access할 때..
- Total
- Today
- Yesterday
- reward
- PowerPoint
- Pipeline
- Policy Gradient
- ColorStream
- RL
- windows 8
- Kinect
- processing
- arduino
- bias
- Gan
- Variance
- Offline RL
- 강화학습
- Off-policy
- Kinect SDK
- 한빛미디어
- dynamic programming
- End-To-End
- Kinect for windows
- Distribution
- 딥러닝
- DepthStream
- ai
- Expression Blend 4
- TensorFlow Lite
- Windows Phone 7
- 파이썬
- SketchFlow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |