티스토리 뷰

728x90

[ 밑줄/연결 ]

 

(프로세스와 계산기의 다른 점)

 

프로세스는 컴퓨터에서 가장 중요한 구성 요소로, 그 특성을 충분히 알아둬야 한다.

 

프로세스에는 수행할 수 있는 기본 연산들의 레퍼토리가 있다.

산술 연산을 할 수 있어서 계산기처럼 수를 더하고 빼고 곱하고 나눌 수 있음

메모리에서 연산을 수행할 데이터를 가져 오거나 연산 결과를 메모리에 저장할 수 있음

컴퓨터의 나머지 부분을 제어함(ex: 버스로 전송되는 신호를 통해 마우스, 키보드, 모니터 등 모든 장치에 대한 입출력 조직화/조정)

결정을 내릴 수가 있음 (ex: 이 데이터가 저 데이터 보다 크다, 이 정보가 저 정보와 동일하다 등 비교 수행)

계산기와 달리 사람의 개입 없이도 작동할 수 있음

 

"기계는 특성상 완전히 자동이 되어야 한다. 즉, 계산이 시작된 후에는 운영자와 독립적이어야 한다." - 폰 노이만

 

ㅇ 현재 처리 중에 데이터를 기반으로 다음에 무슨 일을 할지 결정할 수 있으므로 스스로 전체 시스템을 운영할 수 있음

 

 

(모형 컴퓨터로 더하기 프로그램 만들기)

기본 연산을 수행하기 위한 약 10개의 명령어 레퍼토리가 있음

두 개의 수를 더하고 결과를 메모리 위치에 저장하려면 세개의 명령어가 필요함

LOAD X

ADD Y

STORE Z

 

명령어 레퍼토리가 다른 프로세스에서는....메모리 위치에 접근하는 두 개의 명령어로 처리할 수 있음

COPY X, Z

ADD Y, Z

 

명령어 레퍼토리가 다르면 프로그래머는 두 프로세스의 세부 사항을 모두 잘 알고, 한쪽 명령어 집합을 다른 쪽으로 변환할 때 세심히 주의를 기울여야 한다.

 

(고수준 언어에서 프로그램 실행까지)

 

1960년대 초...

특정 프로세스 아키텍처에 독립적인 고수준 프로그래밍 언어(high-level programming language)의 개발

 

고수준 언어로 작성된 코드는 번역기 프로그램을 통해 대상 프로세서의 어셈블리 언어로 된 명령어로 변환된 다음, 어셈블러에 의해 비트로 변환되어 메모리에 로드되고 실행됨

 

번역기 프로그램 = 컴파일러

 

Z = X +Y

 

'X와 Y라는 메모리 위치에서 값을 가져와서, 두 값을 더하고, Z라는 메모리 위치에 결과를 저장하라'는 뜻

(명령어 레퍼토리는 이 코드를 세 개의 명령어로 변환, 또 다른 컴퓨터용 컴파일러는 두 개의 명령어로변환할 수 있음)

 

각 어셈블러는 각자의 어셈블리 언어 명령어를 실제 명령어의 비트 패턴으로 변환하는 일 뿐만 아니라 변수 X, Y, Z를 저장할 메모리 위치를 확보하는 일을 담당함. 비트 패턴은 각각의 컴퓨터에 대해 거의 완전히 다르게 변환됨

 

같은 입력 표현이 두 개의 다른 컴파일러와 각각의 어셈블러를 거치면서 서로 다른 두 가지 명령어와 비트패턴으로 만들어지는 것

 

고수준 언어에서는 프로그램을 효율적으로 짜기 위해 특정 프로세서의 명령어 레퍼토리를 알아야 할 필요가 없음

 

고수준 언어로 작성된 프로그램은 특정 아키텍처에 종속되지 않음

 

 

(컴퓨터를 작동하게 만드는 운영체계)

 

OS는 컴퓨터 하드웨어를 관리하고 다른 프로그램을 실행할 수 있게 하는 SW의 기초 구조물이며, 그 위에서 실행되는 프로그램을 애플리케이션이라고 함

 

애플리케이션은 어느 정도는 자립적이고 단일한 작업을 처리하는 데 초점이 맞춰진 프로그램을 뜻하는 용어

 

1950년대 초에는 애플리케이션과 운영체계 간에 구별이 없었음

 

프로세스, 메모리, 보조 기억 장치, 디스플레이, 네트워크 인터페이스 등 다수의 구성 요소를 효과적으로 사용하려면 다수의 프로그램을 동시에 실행할 수 있어야 함......프로그램을 이용해 제어할 수 밖에 없음...이런 역할을 하는 프로그램을 운영체계라고 함

 

OS는 컴퓨터의 자원을 제어하고 할당함

1) 프로세스를 관리하면서 현재 사용 중인 프로그램을 스케줄링하고 프로그램 간의 관계를 조정

특정 시점에 활발히 연산하는 프로그램 간에 프로세스의 초점을 전환해 줌. 특정 프로그램이 자원을 독차지 하는 것을 막아 줌. 일반적으로 OS에서 프로세스 수백 개가 동시에 실행됨

 

2) 주기억 장치를 관리

메모리에 프로그램을 로드해서 프로그램이 명령어 실행을 시작할 수 있게 해줌

별개의 프로그램이 서로 간섭하는 것을 막음

Swapping: 필요할 때 프로그램의 일부만 메모리에 가져오고 비활성화 상태일 때에는 꺼내서 디스크로 복사해 두는 것. 마치 프로그램은 전체 컴퓨터를 독점하고 메모리가 무제한인 것처럼 작동하게 해줌

 

3) 보조 기억 장치에 저장된 정보를 관리

파일 시스템이라는 OS의 주요 구성 요소

 

4) 컴퓨터에 연결된 장치들의 활동을 관리하고 조정

 

(시스템 콜)

HW와 다른 SW 간의 인터페이스를 제공함

OS는 애플리케이션이 구축될 수 있는 플랫폼을 제공함

애플리케이션에 제공하는 작업이나 서비스의 집합을 정의함 (ex: 파일로 데이터를 저장, 데이터 가져 오기, 네트워크 연결 맺기, 키보드로 입력된 내용 가져오기, 마우스 클릭 알리기, 디스플레이에 그리기 등)

이런 서비스를 표준화된 방식 또는 합의된 방식으로 이용할 수 있게 함. 애플리케이션은 OS의 특정 부분에 통제권을 넘겨 주는 특별한 명령어를 실행함으로써 서비스를 요청함

OS는 요청에 포함된 어떤 일이든 처리하고, 통제권과 처리 결과를 애플리케이션에 돌려 줌. OS에 서비스를 요청하는 이 진입점을 시스템 콜이라고 함

 

(디바이스 드라이버)

OS와 프린터, 마우스 같은 종류의 HW 장치 간의 가교 역할을 하는 코드

특정 장치가 어떤 일을 하도록 하는 방법을 자세히 알고 있음

 

 

[ 자평 ]

 

어떤 자료를 만드는 중에,  AI full stack, 인프라, 플랫폼, 라이브러리, 컴파이러 등 등 용어를 마구 마구 섞어서 쓰는 분이 있어 좀 정리해 보았다.

 

다른 업계는 모르겠지만  IT업계는 용어 가지고 아는 체를 하고, 장난을 치는 사람들이 너무 많다. 

또한 같이 일하는 분들이 기본 용어 조차 모르면 엄청 힘들다.

 

CPU, GPU, NPU의 기본적 차이

AI 컴파일러가 꼭 필요한지? 왜 필요한지? 뭘 하는 것인지? 

파이썬 이나 C 등과 텐서플로, 케라스, 파이토치가 뭐가 다른지? 왜 AI 전용 개발 프레임워크가 필요한지?

학습과 추론이 왜 각 각 필요한지? 

학습된 모델이 어떻게 배치가 되고 실행할 때 언제, 어떻게 그 역할을 하는지? 

아니 이를 넘어서 머신러닝이나 딥러닝의 아주 간단한 서비스 flow, 파이프라인에 대한 이해? 

API가 도대체 왜 필요하고, 뭘 하는지?, 어떻게 쓰는지? 

플랫폼과 프레임워크의 차이

언어모델과 파운데이션 모델의 차이

멀티 태스크하고 보통 '거기시'하고 비슷한 맞춤화가 어떻게 유사하고 다른지? 

전이학습과 미세튜닝의 차이 등 등

 

모든 컴퓨터 언어를 배울 때 한 번은 해보는 출력문 "Hello, World!"를 만든 컴퓨터공학과 교수님이라 한다.

댓글