정리가 잘되 어있는 Posts and tutorial videos 


http://pubdata.tistory.com/70

https://thebook.io/006723/ch07/04/03-2/

http://sosal.kr/855



https://www.youtube.com/watch?v=yNt3NnbsIzQ



'Master > Machine Learning' 카테고리의 다른 글

pvalues , 유의 확률 ,귀무가설null hypothesis  (0) 2017.11.09
Arrange Regarding of Python libraries  (0) 2017.11.07
To read list sites.  (0) 2017.11.06

http://bowbowbow.tistory.com/12

'Development > Native' 카테고리의 다른 글

Good Tutorial Make  (0) 2017.11.08
Continuously Computer Basic Concepts  (0) 2017.11.08


1. 다중작업

위키백과, 우리 모두의 백과사전.
(멀티태스킹에서 넘어옴)

전산학 분야에서 멀티태스킹(영어: multitasking) 또는 다중작업(이하 멀티태스킹)은 다수의 작업(혹은 프로세스, 이하 태스크[1])이 중앙 처리 장치(이하 CPU)와 같은 공용자원을 나누어 사용하는 것을 말한다. 엄밀히 말해 한 개의 CPU를 가진 개인용 컴퓨터가 특정 순간에 수행할 수 있는 태스크의 개수는 하나뿐이다. 따라서 멀티태스킹은 스케줄링이라는 방식을 사용하여 컴퓨터 사용자에게 병렬 연산이 이루어지는 것과 같은 환경을 제공한다. 스케줄링 방식은 CPU 사용시간을 일정한 기준에 따라 나누어 각 태스크가 사용할 수 있도록 분배한다. 분배받은 시간동안 태스크가 CPU를 사용할 때 다른 태스크들은 자신의 차례가 오기를 기다린다. 분배받은 시간이 종료되어 태스크가 사용하던 CPU를 다른 태스크가 사용할 수 있도록 재배정하는 것을 문맥교환이라 하는데 스케줄링에서 이 문맥교환이 충분히 자주 발생하게 되면 컴퓨터 사용자는 병렬 연산이 이루어진 것처럼 느끼게 된다.

멀티태스킹은 다수의 CPU를 내장한 컴퓨터(즉, 멀티프로세서)에서도 유효한데, 멀티태스킹을 사용하게 되면 탑재한 CPU의 숫자보다 많은 수의 태스크를 동시에 수행할 수 있게 된다.

일반적으로 운영 체제는 아래 나열된 스케줄링 방식중 하나를 채택해서 사용한다.

  • 멀티프로그래밍 시스템에서는 현재 실행되고 있는 태스크는 다른 외부 이벤트를 기다려야 하는 상황이 되거나, 컴퓨터의 스케줄러가 강제로 실행 중인 태스크를 중단시킬 때까지 계속 진행된다. 멀티 프로그램 시스템은 CPU 사용률을 극대화할 수 있도록 설계되었다.
  • 시분할 시스템에서는 현재 실행되고 있는 태스크가 스스로 혹은 하드웨어 인터럽트 따위의 외부적인 이유로 중앙 처리 장치의 점유를 포기해야 한다. 시분할 시스템은 다수의 프로그램이 거의 동시에 수행될 수 있도록 해준다. "시간을 분할한다"라는 표현은 단말에 위치한 사용자가 함께 공유할 수 있는 IBM사의 TSO, CP/CMS와 같은 컴퓨터를 가리키기 위해 쓰였다.
  • 실시간 시스템에서는 외부 이벤트가 발생하였을 때 몇 개의 대기 중인 태스크들이 CPU를 점유할 수 있도록 보장해 준다. 실시간 시스템은 시간 내에 처리하여야 하는 산업 로봇과 같은 기계적인 장치를 제어하기 위해 사용된다.

동일한 시스템을 여러 명이 공유해서 쓰는 것을 나타내던 시분할이라는 용어는 개인용 컴퓨터와 워크스테이션의 발전으로 인해 멀티태스킹이라는 용어로 대체되어 특수한 경우를 제외하고 현재는 거의 사용되지 않는다.

2. 멀티프로그래밍[편집]

CPU에 비하여 주변장치들은 상대적으로 매우 느리다. 만약 컴퓨터가 주변장치에 접근해야 하는 프로그램을 실행시키면 CPU는 아무것도 하지 못하고, 주변장치가 데이터 처리를 완료해 줄 때까지 기다려야 했다. 전산학 발전 초기단계에서 CPU 시간은 매우 귀중한 자원이었기 때문에 이러한 CPU 시간의 낭비는 매우 비효율적으로 보였다.

이러한 낭비를 막기 위해서 1960년대가 되면서 최초의 멀티 프로그래밍 시스템을 개발하려는 움직임이 있었다. 이 시스템에서는 몇 개의 서로 다른 프로그램들이 컴퓨터의 메모리에 불러들여진다. 첫 번째 프로그램이 실행되다가 주변장치의 처리를 기다려야 하게 되면, 이 프로그램의 문맥은 저장이 되고, 두 번째 프로그램이 실행될 기회를 얻게 된다. 이런식의 처리 과정이 모든 프로그램의 작업이 완료될 때까지 반복적으로 일어난다.

멀티프로그래밍은 프로그램이 적절한 시간안에 완료되는 것을 보장해주지는 못한다. 사실, 아주 먼 옛날의 프로그램도 주변장치에 접근할 필요없이 몇시간이고 잘 동작하였다. 이러한 컴퓨터 환경은 활성화된 단말기 앞에 사용자가 결과를 확인하기 위해서 대기하고 있지만 않다면 특별한 문제가 없었다. 사용자는 단지 컴퓨터를 조작하는 사람에게 천공카드 한묶음(프로그램)을 건내주고 떠났다가, 몇시간 후 출력된 결과를 확인하기 위해서 다시 돌아오면 되기 때문이다. 멀티 프로그래밍은 여러개의 순차 프로그램들이 처리될 때 대기시간을 크게 줄여주었다.

3. 프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다. 프로세스 관리 운영 체제의 중요한 부분이 되었다.


4. 메모리란 컴퓨터의 기억장치를 일컫는다. 큰 틀에서 러프하게 설명하면, CPU는 계산을 담당하고, 메모리는 기억을 담당한다. 비유를 하자면 CPU는 사람이고, 메모리는 책과 노트를 펼칠 수 있는 책상이며, 보조기억장치는 책장이라 할 수 있겠다. 책상의 크기가 곧 메모리의 크기로, 책상이 클 수록 책을 이것 저것 펼쳐놓을 수 있는 것과 마찬가지가 된다. 어디까지나 쉽게 설명하기 위한 비유이므로 자세한 것은 아래 항목을 참고하자.


CPU에서 계산한 결과가 메모리에 저장이 되는 것이다. 하드디스크 같은 보조기억장치에 저장되는 것이 아니다. 그러니까 컴퓨터가 켜지면서부터 프로그램이 실행되면 그것들은 몽땅 메모리에 올라오게 된다. 이때문에 메모리의 크기가 중요하지만 옛날엔 이 메모리의 가격이 비쌌기 때문에 메모리를 절약하기 위해 페이지니 스와핑이니 하는 온갖 방법이 탄생했다. 또한 이 메모리에도 용도별로 여러 종류가 존재하며 가격에 따라 그 크기와 용도가 결정되기도 한다. 요즘은 메모리의 중요성이나 존재조차 모르는 사람들이 많이 있다.


5.컴파일 

목적코드가 실행되는 방법[편집]

컴파일러가 실행되는 컴퓨터나 운영체제가 컴파일러의 목적코드가 실행될 컴퓨터나 운영체제와 같은 경우 네이티브 컴파일러(native compiler 또는 hosted compiler)라고 한다.

네이티브 컴파일러 예:

반면에 크로스 컴파일러(cross compiler)는 다른 컴퓨터나 운영체제에서 실행되도록 제작된다. 임베디드 시스템 등 소프트웨어 개발에 충분한 환경을 갖추지 못한 환경에서 동작할 프로그램을 만들기 위해 사용된다.

크로스 컴파일러 예 :

  • 리눅스(x86)에서 ARM용 임베디드 시스템용 프로그램이나 커널을 개발하기 위해 ARM용 gcc을 사용하면 ARM 코드의 실행파일이 생성된다.
  • 마이크로소프트 윈도에서 8051, AVR, PIC등의 시스템 프로그램을 개발하기 위해 해당 컴파일러를 사용하면 해당 CPU의 코드가 생성된다.

자바[편집]

또한 가상 머신에서 동작할 프로그램을 만드는 컴파일러도 있다. 이 경우 일반적으로 출력물이 가상 머신을 위해 제작된 바이트코드 형태의 기계어가 되므로 바이트코드 컴파일러라고 부른다.

일단 구조와 다단 구조[편집]

소스를 한 번 읽고 번역하여 바로 출력물을 내놓는 컴파일러도 있지만 여러 가지 목적을 위해 중간 결과를 만들어 그 결과를 다시 최종 결과로 출력하는 컴파일러도 있다. 중간 결과를 만드는 데는 여러 가지 이유가 있다.

  • 다양한 언어 지원 : 다양한 입력 언어를 동일한 중간 표현으로 표현하거나 동일한 중간 표현을 여러 가지 출력 언어로 표현하면 다양한 입력 언어와 출력 언어를 지원하는 컴파일러를 작성할 수 있다.
  • 속도 및 최적화 : 고수준 언어일수록 최적화된 성능보다는 사람에게 이해하기 쉬운 형태를 염두에 두고 설계된다. 때문에 중간형태를 거치는 것이 보다 저수준에서 효율적으로 프로그램을 최적화한 다음 최종적으로 출력물을 내놓는 데 유리할 수 있다.
  • 저스트 인 타임 컴파일 (JIT 컴파일) : 스몰토크자바, 마이크로소프트 공통 중간 언어(CIL) 등의 컴파일러는 가상 머신의 바이트코드를 출력한다. 그러나 가상 머신은 플랫폼의 기계어에 비해 속도가 느릴 수밖에 없으므로 이들 가상 머신에는 저스트 인 타임 컴파일러가 탑재되어 실행 직전에 현재 플랫폼의 기계어로 다시 한 번 컴파일되어 속도를 향상시킨다.


'Development > Native' 카테고리의 다른 글

Good Tutorial Make  (0) 2017.11.08
Continuously Computer Basic Concepts  (0) 2017.11.08

+ Recent posts