웹풀스택 공부 중
운영체제 (OS) 와 프로그램의 기초 본문
OS 및 프로그램의 동작원리
- 응용 프로그램 == 프로그램 == Application
- 하드웨어 = Program이 동작되는 머신
- 내부자원: CPU + Memory
- 외부 자원 (입출력: Input Output): 네트워크 IO, 저장장치 IO, Mouse, Keyboard, ...
- 속도가 제일 느림
- 용량이 제일 큼
- 소프트웨어 = OS (시스템 소프트웨어) + Application
- OS: OS 운영체제 - 아래 Applicationd에게 하드웨어를 제공함
- Application
- Shell: 유저가 Kernel을 직접 다루기는 어려워 응용 소프트웨어로 간편한 제어 및 사용을 제공함
- 그 외의 모든 Application: 유저가 다운받고, 설치해서 사용하는 모든것
- 두가지 API
- OS: 하드웨어를 사용하는 방법
- Shell = OS를 사용하기 위한 API를 더 쉽게 만들어주는 API = OS를 더 잘 사용하게 해줌!
- 동작 원리:
- OS (= Kernel)은 커널 부팅 직후 초기화 프로세스를 시작함
- 시스템에 필요한 프로세스가 자동을 실행되는 단계
- 초기화 프로세스:
- Karnel(커널) 부팅이 끝남
- 하드웨어에 문제가 없는지 확인
- OS가 하드웨어의 모든 기능을 제어하게 되었을 때
- 초기화 프로세스 준비:
- 앞으로 필요한 모든 프로세스를 시작함
- PID 1번이 부여됨
- 초기화 시스템이 초기화 프로세스를 시작함
- 구성파일을 읽고 구성 상태에 따라 서비스와 프로세스를 시작함
- 초기화 시스템: Linux Service vs Daemon Management
- 과거방법: SysVInit ("init")
- 한번만 수행 후 종료 <- 이후 개별 프로세스 추적 불가능
- 현재방법: SystemD (Daemon Process)
- 한번 수행 이후 계속 Daemon 형태로 있어 개별 프로세스 추적이 가능함What is Daemon?
- 과거방법: SysVInit ("init")
- Karnel(커널) 부팅이 끝남
- OS (= Kernel)은 커널 부팅 직후 초기화 프로세스를 시작함
- 프로세는 두가지 종류가 있음
- Foreground Process (부모가 있음)
- Background Process (부모가 없음)
- 우리도 모르게 동작중인 Background Process를 Linux에서 Daemon이라고 부름
- ex.) 리눅스에서 끝에 d가 붙는 프로스세스들이 모드 Daemon이다: sshd, httpd, ...
- 우리도 모르게 동작중인 Background Process를 Linux에서 Daemon이라고 부름
Program vs Process vs Thread
- Program: 실행이 가능한 상태 (정적)
- Process: 실행중인 상태 (동적) = 자원이 할당 됨
- Heap 영역이 있음
- 다수의 Thread를 가질 수 있음
- Thread끼리 통신하기 위한 방법:
- Process의 Heap 영역에서 통신을 진행함
- Heap: 다리 역할
- Process의 Heap 영역에서 통신을 진행함
- Thread끼리 통신하기 위한 방법:
- Thread:
- Stack 영역이 있음
- 함수를 실행하기 위한 것들이 들어가 있음
- ex.) 변수, ...
- Thread 마다 이것들을 가지고 있음
- Program Counter = 실행 위치
- 명령어 Register = 실행 함수
- 스택 영역 = 실행 변수
Program이 실행되는 방식
- CPU can only read Machine Language!
- 프로그램이 동작하는 기본 원리: 기계어가 머신에서 해석되어 실행되는 것
- 기계어(Program)을 만드는 방식 두가지 (만들어지면 Process라고 부름):
- Complie
- result: Machine Language
- "번역": 파일을 통으로 변환하여 수행함
- ex.) 대표적인 Compile 언어인 C 개발시
- C code -> GCC (Compiler) -> Assembly & Linking (Linking Libraries) -> Machine Lanuage Executable (= Binary code) -> Runs
- C code -> GCC (Compiler) -> Assembly & Linking (Linking Libraries) -> Machine Lanuage Executable (= Binary code) -> Runs
- Interpret
- result: Machine Language
- "통역" 한줄 한줄 변환함
- ex.) 대표적인 Interpreter 언어인 Java 개발시
- 여기서도 Compile하는 과정이 필요함!
- Java Code -> Compile -> JAR (중간 기계어로 변환하는 과정 - .class) -> JVM (Interpreter) -> 각 OS에 맞게 Interpret함 (각 OS 마다 읽을 수 있는 기계어가 다름) -> Runs
- Compile과 Run Time이 나눠져 있음
- Compile Error: 컴파일 시 인지되는 문법 오류 등을 발생시키는 오류
- Runtime Error: 실제 동작중에 발생하는 에러
- Complie
- 기계어(Program)을 만드는 방식 두가지 (만들어지면 Process라고 부름):
Blocking vs Non-Blocking & Synchrouous vs Asynchrous
- 둘이 다르지만 조합해서 사용하진 않음
- 연속성: Blocking & Non-Blocking = 일반적으로 CPU가 멈추는것을 의미함
- Blocking: 하나의 작업이 간간히 방해받으며 수행된다
- 방해: 주기적인 프로그램 실행상태를 확인하는 등
- Non-Blocking: 하나의 작업이 어떠한 방해도 받지 않고 수행된다
- 웹 개발에서 자주 사용되지 않음
- CPU Scheduling과 관련있음
- Blocking: 하나의 작업이 간간히 방해받으며 수행된다
- 동시성: Synchronous vs Asynchronous
- Synchronous: 앞선 작업이 완료되어 그 다음 작업을 수행할 수 있다
- 작업이 완료될때까지 하던 작업을 멈추고 대기함
- Aysnchronous: 앞선 작업이 완료되는말든 그 다음 작업을 수행할 수 있다
- 작업이 완료되는말든 하던 작업을 그대로 진행함
- 작업이 완료되면 완료되었다고 응답을 받음: Callback 함수
- 작업이 완료되는말든 하던 작업을 그대로 진행함
- Network 작업에 관련있음
- Synchronous: 앞선 작업이 완료되어 그 다음 작업을 수행할 수 있다
반응형
'웹개발 > 웹 개념' 카테고리의 다른 글
Load Balancer와 배포방식의 기초 (0) | 2024.08.16 |
---|---|
Infrastructure: 서버의 구성 기초 (0) | 2024.08.16 |
Hydration 개념 공략 (0) | 2024.08.13 |
2주차 (0) | 2024.08.13 |
1주차 (0) | 2024.08.09 |