운영체제와 프로그래밍 언어 -기초

운영체제와 프로그래밍 언어 -기초

Analog

Analog 신호를 그래프로 나타내면 x축이 시간의 변화라고 했을때, y축의 값이 끊임없이 이어진다.

(아무리 확대해도 끊임없이 확대가 가능하고 y축값이 계속 나온다 -> 정보의 양이 무한대)

y축의 최댓값을 높이거나 x축의 간격을 줄임으로써 세밀하게 디지털화할 수 있다.

출처(https://mathphysics.tistory.com/576)

Digital

Digital 신호를 그래프로 나타내면 x축이 시간의 변화라고 했을때, y축의 값이 일정한 간격으로 끊겨져 있다.

출처(https://mathphysics.tistory.com/576)

Quantization

-> 아날로그형태의 신호나 정보를 디지털화 하는 작업

아날로그를 디지털로 바꿀때

1. 최댓값과 최솟값을 정하고 균일한 간격으로 나눈다.

2. 일정 시간단위로 무슨 값인지 잰다.

Quantization의 대표적인 예 -> Sampling

sampling rate -> Hz가 커질수로 x축 인터벌이 작아진다. 그러므로 아날로그와 가깝게 신호, 정보를 디지털화할 수 있다.

=> 하지만 이것이 무조건 옳은 것은 아니다. (공학적 관점에서 더 좋은 성능을 만들려면 더 많은 비용이 들기 때문에)

QCELP 사람의 음성을 디지털로 만드는 기술 -> 샘플링하는 기술이다.

소리를 디지털화 할때 사람이 듣기에 아날로그와 차이가 없을 때 '무손실'이라고 한다.

아날로그 신호를 디지털 신호로 바꾸는 장치 -> A/D Converter

디지털 신호를 아날로그 신호로 바꾸는 장치 -> D/A converter

이 두개를 범용적을 하는 것이 Digital Signal Processor

사진도 디지털 사진을 확대하면 이미지로 보기 어려운 점들이 나옴.

-> 해상도를 높이면 확대해도 어색함이 없는(무손실에 가까운) 이미지를 확인할 수 있다.

Binary Code

글자와 명령에 매핑하는 약속 (ex ASKII Code)

숫자에 해당하는 인간계의 의미

8bit면 256개의 코드를 만들 수 있다.(미국사람 입장에서의 최소 공간)

1byte = 8bit 컴퓨터에 데이터를 저장하는 공간의 최소 단위

한국은 저장공간이 더 필요하기 때문에 16bit의 유니코드를 사용한다.

Operating System

운영체제의 역할

어플리케이션이 커널을 통해 하드웨어(CPU, Memory, Devices 등)에 접근할 수 있도록 하고 하드웨어들을 제어관리한다.

하드웨어, 소프트웨어 자원을 제어, 관리한다.

하드웨어와 프로그램간의 중개자 역할을 한다.

운영체제의 기능

1 . Time-Sharing Operating System

한 컴퓨터에 여러 개의 프로그램이 있을때, 운영체제의 도움을 받아 컴퓨터자원을 나누어 쓴다.

실제로 동시에 하는 것은 아니지만 빨라서 동시에 일어나는 것처럼 보인다.

ex) 워드프로세서와 노래를 듣는 것을 동시에 가능

2 . Single-Tasking And Multi-Tasking

SIngle-Tasking -> 같은 시간에 프로그램 한개만 실행

Multi-Tasking -> 컴퓨터적으로 동시에 여러개의 일을 한다.

두개 이상의 프로그램이 빠르게 돌아가면서(두개의 일이 동시에 돌아가는 것처럼) 컴퓨터 자원을 활용하는 것 -> Concurrency

Task-scheduling -> 프로그램의 우선순위를 매겨 실행한다.

3. Multi User and Single User

동시에 두명이상의 사용자가 하나의 물리적인 컴퓨터를 사용하는 것처럼 보여주는 것 -> Multi User (당연히 멀티태스킹)

동시에 두명이상의 사용자가 하나의 물리적인 컴퓨터를 사용할 수 없는 것 -> Single User

Multi User는 유닉스계열에서 시작하였고 Mac Os는 당연히 가능하고,

Windosw는 계정을 만들 수 있는 것으로 멀티유저에 가깝다고 볼 수 있다.

Multi User -> 서로가 컴퓨터 자원을 공유할때 영향을 받지 않고 이들간의 상호작용도 가능하다. (서로를 Isolation)

4. Embedded

제한된 리소스(메모리, 디스크)의 작은 것들 -> 휴대폰, 태블릿, 더 작은 기기들, 스마트와치, 센서, 아두이노, 라즈베리파이

5. Real-Time

즉각적으로 실행되는 것은 아니다 -> 이벤트가 발생하면(요구가 들어오면) 일정 시간 안에 마친다.

Hard Real-Time 반드시 마친다.

Soft Real-Time 반드시는 아니다.

요구받는 일을 먼저 처리하는 것은 멀티태스킹이 일반적이나 싱글태스킹도 있다.

Event-Driven System -> A라는 일을 하는데 B가 생긴다. (바퀴 굴리는데 장애물이 나타나면 센서를 통해 차를 멈춘다.)

Machine Language (or Machine Code)

-> 기계어, 기계를 위한 코드로 기계마다 명령이 다름

-> 숫자의 조합(애니악 세대)

-> 외부와의 통신을 위해 CPU는 전선을 쓴다. (이 선이 32개면 32bit ex) Window 32bit 운영체제)

-> 전선이 0과 1을 전달함으로써 CPU가 일을 한다.

-> 이 0과 1의 조합에 따라 명령이 달라지고 우리는 이 전선을 통해 CPU에게 명령을 준다.)

Assembly

Machine Language가 기계마다 명령이 달랐기 떄문에 통일을 위한 언어 Assembly가 등장한다.

가독성이 증가했다.

Low-Level 언어로 기계와 친숙하지만 기계어보다 편하다.

특정하드웨어 (특히 CPU)에 밀결합한다.

Symbolic해서 IBM, Intel 등 서로의 것을 쓸 때 기계어보다 비슷비슷했다.

Assembler -> 기계어로 번역을 해주는 역할을 한다.

기계에 연결한다. -> 여기저기 설치되긴 힘들다

C

Bell Labs에서 유닉스를 만들기위해 탄생 -> 여러 기계에 유닉스가 올라가기를 원했다.

절차지향언어로 기계에게 절차를 가르친다.

하드웨어, 소프트웨어 상관없이 전분야에 걸쳐서 사용될 수 있었다.

표준화가 가능하다. 그래서 C언어를 배우면 여러 하드웨어의 프로그램을 짤 수 있다.

C++

절차적 언어의 특성도 포함하며 C에서 Class를 구현하고 싶었다. 하지만 완전히 다른 언어를 만들면 아무도 안쓸까봐 'C=C+1 -> C++'의 C 의 고유 문법을 사용하여 C++이라고 하였다.

하드웨어 프로그래밍에 강하다. 하드웨어와 가까운 언어중 성능이 좋은 High-Level 언어이다.

Generic Programming이 가능하다(일일히 코딩하지않고 프로그램이 알아서 해준다.)

System Programming, Embedded, 대형시스템, 서버등 멀리 쓰인다.

Compiler 형식이다.

Java

Sun회사의 James Gosling 주도하에 만들어졌다.

객체지향적인 성격을 가지고 있고 구조적이다.

웹브라우저를 통해 Virtual Machine을 띄우는 컨셉이다.

-> 프로그램의 호환성이 증가한다. -> 자바로 만든 가짜 실행파일과 이 파일을 진짜 파일로 바꾸는 프로그램만 있으면 어느 운영체제든 돌아간다.

하지만 등장했을 당시 기계 성능이 좋지않아서 별로였지만 이후 웹브라우저 등장 후 인기가 많아졌다.

JavaScript

Java와는 상관이 없다.

웹브라우저에서 동작하는 언어이다.

High-Level 언어이고 Dynamic 언어이다 (파이썬처럼 서로 다른 변수간의 교환이 가능하다 ( ex) auto) , Weakly Typed라고도 한다)

Multi-Paradigm -> 객체, 절차 둘 다 가능하다

사용자와 페이지의 상호작용이 가능하다.

운영체제위에서 프로그래밍언어가 할 수 있는 것을 웹브라우젖에서 할 수 있는 언어

멀티플랫폼언어 -> 휴대폰 어플도 짤 수 있다.

Client, Server 어플리케이션 둘 다 짤 수 있는 언어이다. -> 이것을 가능하게 한 Node.js -> 자바스크립트로 서버프로그래밍이 가능해진다.

Phone Gap, CORDOVA

-> HTML, CSS, 자바스크립트로 어플리케이션 짤 수 있고 웹페이지를 휴대폰어플리케이션 형태로 변환할 수 있다.

from http://jeonghun0711.tistory.com/162 by ccl(A) rewrite - 2021-12-23 19:28:02