본문 바로가기

Operating System

[Operating System] 1. OS란 무엇인가

OS -> Operating System
컴퓨터 시스템이 돌아가는데 있어서 운영을 하는데 도움을 주는 소프트웨어

컴퓨터?
정보를 처리하기 위한 기계!

그럼 정보는?
컴퓨터 기준에서 2진수로 표현되는 그런 데이터 쪼가리 - 단순히 2진수는 딱히 확실성을 가지고 측정이 되는 그런 물건은 아니다.

컴퓨터는 어떻게 정보를 처리하는가?
정보의 단위? bit(2진수) -> 용량이라는 게 결국 그 프로그램이 가지고 있는 정보의 총량
정보들을 어떻게 다룰까? 0 -> 1 / 1 -> 0
대수!
bool -> NOT AND OR
논리 게이트 -> NOT AND OR XOR NAND NOR
논리회로 등등을 이용해서 컴퓨터들은 정보를 처리! -> 무어의 법칙도 따를 것이고, 황의 법칙 등등
정보의 저장이나 또는 전송 : Flip Flop! / 데이터 버스

저런 합성회로를 이용을 해서 우리는 
덧셈 -> 반가산기, 전가산기
뺄셈 2의 보수
곱셈 / 나눗셈 -> 가산기랑 뺄셈 반복하면 그게 곱셈기 나눗셈기
실수? 부동 소수점 표현법! float, double
함수? GOTO 

컴퓨터? 만능? -> NO!
범용성! (Universality)
NOT, AND, OR 게이트만으로도 모든 계산을 해야한다. 
NAND, NOR 게이트만으로도 모든 회로 표현할 수 있다. -> Universality Gate
범용성을 가진 컴퓨터 : General-Purpose Computer <-> Embedded Computer(특수 목적에만 사용될 컴퓨터)

계산가능성 : Computability
Turing Computable : 튜링 머신으로 계산이 가능해야한다.
정지 문제 : Halting Problem : 튜링 머신에서 풀 수 없는 문제

컴퓨터는 누가 만들었을까??????
앨랜 튜링 - 튜링 머신
폰 노이만 - ISA : instruction Set Architecture

튜링 머신?
현대 컴퓨터의 구조와 매우 흡사한 구조를 가지고 있던 머신이다!

폰 노이만 구조
컴퓨터가 프로그램이 돌아가면서 이 정보들을 메모리에 접근해서 저장할 수 있는 구조
프로그램이 이제 메모리에 적재가 된다!
CPU와 메모리 사이에는 이를 보조하는 버스가 있다!

프로그램이 뭘까?!!!
프로그램은 명령어들의 집합!
하드웨어가 어떻게 일을 처리할 지 명령해주는 명령서! 

운영체제도 프로그램인가? -> YES
컴퓨터에서 메모리에 적재가 되서 컴퓨터가 켜져있는 동안 계속 돌아가는 프로그램
어플리케이션 프로그램 / 이 어플리케이션이 돌아갈 때 필요한 서비스를 제공하기 위해 돌아가는 프로그램

돌아가는 프로그램 -> Process
즉 OS는 자원, 프로세스들을 관리하고, UI 등을 지원하기 위한 프로그램!

OS를 정의하자!
범용적으로 OS를 정의하는 그런 기준은 딱히 없다!
가장 흔하게 정의를 하는 것은 컴퓨터에서 메모리에 적재가 되서 컴퓨터가 켜져있는 동안 계속 돌아가는 프로그램
ㄴ 하나의 단어로 표현하면, 커널!

커널이 있는 동안은 두 타입의 프로그램이 돌아갈 수 있다.
1. 시스템 프로그램
2. 응용 프로그램

부트 스트랩?
컴퓨터가 켜질 때 제일 먼저 켜지는 프로그램 / OS를 로딩해준다.

인터럽트!
하드웨어는 인터럽트라는 트리거를 바탕으로 활동을 한다.
CPU나 IO 그 외 등등이 버스를 통해서 시그널을 보내는데 그 시그널이 바로 인터럽트!

 

컴퓨터 시스템 컴포넌트 정의!
CPU - 명령어를 실행하는 하드웨어
프로세서 - 1개 이상의 CPU를 가지고 있는 물리적인 칩
코어 - CPU의 후면 계산(백그라운드 상태로 실행되는 계산 작업!) 단위 
멀티코어 - 하나의 CPU에서 여러개의 계산 가능한 코어를 가지고 있다!
멀티 프로세서 - 여러개의 프로세서를 포함하는 단위

멀티프로세싱
1. SMP(Symmetric multiprocessing) - 대칭적 멀티프로세싱
제일 흔한 방식! 모든 일을 CPU가 각각 나눠서 처리한다.
1. ASMP(Asymmetric multiprocessing) - 비대칭적 멀티프로세싱
각각의 프로세서가 특정한 일을 담당한다.

멀티코어 
하나의 포로세서 칩이 있으면, 그 안에 여러개의 CPU 코어가 존재한다.

멀티프로그래밍
한 타임에 1개 이상의 프로그램을 실행하는 것
몇몇의 메모리 안에 있는 프로세스를 동시에 유지하도록 하는 것
CPU의 이용성을 증가시킨다!

멀티태스킹(= 멀티프로세싱)
CPU 스케쥴링이라는 것을 이용해서 CPU가 잡을 여러번(자주) 변경하는 것을 지원할 수 있게 만든 시스템
사용자는 그 잡들이 실행되는 동안은 상호작용이 가능하다!

CPU 스케쥴링
몇몇의 프로세스가 같은 시간에 실행을 해야하는 경우 시스템은 반드시 다음에 실행될 프로세스를 골라야 한다!

CPU가 연산함에 있어서는 2가지 방식이 존재한다.
1. 유저 모드
2. 커널 모드

가상화!
하나의 컴퓨터를 추상화 하는 과정을 가상화라고 한다!
몇몇의 다른 실행 환경을 만드는 과정!
대표적인 예시가 VMWare, WSL, KVM, XEN, 그 외 등등!

컴퓨터 환경
1. 전통적인 컴퓨팅 환경
2. 모바일 컴퓨팅 환경
3. Client-Server 환경
4. P2P 환경
5. 클라우드
6. 실시간 임베디드 시스템 환경
등등

OS는 어떤 일을 수행할까
1. UI - CLI(Shell : Bash, Sh, Csh, Tcsh, Zsh, Fish 등등) / GUI(MacOS, KDE/GNOME/ Window 등등) / 터치스크린(안드로이드 iOS 크롬OS)
2. 프로그램 실행
3. IO 연산
4. 파일 시스템
5. 통신
6. 에러 감지(시스템단에서 검출 가능한 것들)
7. 자원 할당(malloc, free)
8. 로깅
9. 보안 
등등을 담당한다.

시스템콜
OS에서 제공하는 서비스를 사용할 수 있게 만든 인터페이스(IO가 정해져 있는 것들)
API : Application Programming Interface 개발하면서 어떤 시스템의 자원을 어플리케이션이 사용하는데 지켜야 할 인터페이스

'Operating System' 카테고리의 다른 글

[OS] CPU 스케쥴링  (0) 2022.02.08
[C#, OS] Monitor  (0) 2022.02.08
[OS] 쓰레드  (0) 2022.01.20
[OS] 프로세스 간 통신  (0) 2022.01.11
[OS] Process란  (0) 2022.01.06