컴퓨터 시스템은 응용프로그램을 실행하기 위해 함께 동작하는 하드웨어 & 시스템 소프트웨어로 구성
프로그램
-
소스 프로그램(바이너리 파일 - non text file )
-
0, 1로 이루어진 비트들로 구성
-
데이터의 저장과 처리를 목적으로 함
-
텍스트 파일(text file - EX hello.c )
-
byte 단위(8 bits)로 구성
-
오로지 ascii 문자들로 구성
프로그램 생성
- 사용자가 에디터에서 소스 프로그램(바이너리 파일)을 생성하고 내부적으로는 텍스트 파일 형태로 저장
프로그램 실행
- 텍스트 파일이 컴파일러와 링커에 의해 바이너리 실행파일로 번역
컴파일 시스템
-
소스 파일(hello.c) -> 실행파일(hello)로 번역하는 시스템
-
전처리기, 컴파일러, 어셈블러, 링커 로 구성
시스템 하드웨어 조직
버스(Bus)
-
시스템의 요소들을 잇는 역할
-
word 단위로 데이터 전송 ( 기본 시스템 변수 == 32bits 혹은 64bits )
메인 메모리
-
프로세서가 프로그램을 실행하는 동안 데이터 혹은 프로그램을 모두 저장하는 임시 저장장치
-
DRAM(dynamic random access memory) 칩들로 구성
프로세서
-
주처리장치(CPU)라고도 불린다
-
엄밀히 말하면 다르지만, CPU의 핵심적인 부분인 연산(Control Unit)과 제어(ALU, Arithmetic Logical Unit)를 담당하기 때문
-
-
메인 메모리에 저장된 인스트럭션들을 해독(실행)
-
반복
-
프로그램 카운터(PC)가 가리키는 곳을 실행
-
다음 인스트럭션의 위치를 가리키도록 PC값 업데이트
-
|
캐시 메모리 (CPU 내부)
-
프로세서-메모리 간 격차에 대응하기 위해 등장
-
프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장
-
L1, L2 cache - SRAM(Static Random Access Memory)라는 하드웨어 기술 이용하여 구현
-
register file은 L0
운영체제
-
응용 프로그램이 효율적으로 잘 작동할 수 있게 응용 프로그램이 요청하는 시스템 자원(System Resource)을 효율적으로 분배 · 관리 혹은 CPU 시간을 할당 하는 등의 역할을 한다.
⁎ 소프트웨어 ⊃ 운영체제, 응용 프로그램
⁎ 응용 프로그램 : PC에 있는 프로그램 혹은 모바일 APP 등 우리가 흔히 사용하는 프로그램들
운영체제는 사용자 인터페이스 제공
쉘(shell)
-
사용자의 요청을 받아, OS에 넘겨주는 등 사용자가 운영체제 기능을 조작할 수 있도록 인터페이스를 제공하는 프로그램이다. (User - OS 커뮤니케이션을 도와주는 역할)
-
다른 응용프로그램들과 마찬가지로 일종의 응용 프로그램이다.
SW | User | User Space | ||
Application | Shell | |||
API | ||||
System Call | ||||
OS | Kernel Space | |||
HW | Hardware |
운영체제는 응용프로그램을 위해서도 인터페이스 제공
API(Application Programming Interface)
-
프로그래밍 언어를 사용하여 API를 매개로 응용프로그램과 OS 간의 커뮤니케이션이 가능하다
-
함수로서 제공
-
함수들이 많기 때문에 주로 API가 라이브러리(library) 형태로 제공
-
응용 프로그램이 OS에 요청하는 기능들의 집합이라고 봐도 무방
-
C언어로된 API 즉, C library에 있는 printf() 호출 -> OS에서 printf() 요청을 수행
-
시스템 콜(System Call)
-
시스템 호출 인터페이스
-
운영체제가 운영체제의 각 기능들을 사용할 수 있도록 시스템 콜이라는 명령 혹은 함수를 제공
-
API 내부에는 시스템 콜을 기반으로(호출) 하는 경우가 대부분
-
응용 프로그램은 운영체제 기능 필요시 API를 사용하여 프로그램 작성
-
응용 프로그램이 실행되고, 운영체제 기능이 필요한 API를 호출하면 시스템 콜이 호출되고 커널모드로 변경되어 OS기능을 사용한다. Exception 중 Trap에 해당하는 상황이다. 즉, 트랩 핸들링을 통해 커널모드가 실행될 수 있다.
⁕ 인터페이스 : 두 시스템 사이에서 커뮤니케이션을 담당하는 매개체, 대부분 추상화되어 존재한다
⁕ 시스템 콜은 운영체제 기능을 호출하는 함수(찐 액기스) / API는 각 언어별로 운영체제 기능을 호출하는 인터페이스 함수(찐 액기스를 섭취하기 위해 다양한 형태로 음료를 만들어놓은 것)
CPU 권한 모드
-
사용자 모드 (User mode) : 응용 프로그램이 CPU를 사용할 때
-
커널 모드 (Kernel mode) : OS가 CPU를 사용할 때
-
특권 명령어 실행
-
원하는 작업수행을 위한 자원 접근을 가능하게 함
-
커널 모드를 실행하려면 반드시 시스템 콜을 사용해야함
-
PCB (Process Control Block)
프로세스 상태 정보를 저장하는 곳으로 주로 PID (Process Id), 주요 레지스터 (pc, sp 등), 스케줄링 정보(process state), 메모리 정보 등을 저장할 수 있다.
Context Switching
-
Context : 프로세스가 실행하는 데 필요한 모든 상태 정보(PC, register file, main memory ... etc)
-
CPU가 다수의 프로세스를 동시에 실행하는 것처럼 보이게 해줌( multi-tasking )
-
현재 프로세스의 context를 저장, 다른 새로운 프로세스로 context를 복원
-
전환(스케줄링)은 운영체제의 커널(Kernel)에 의해 관리 됨
-
컴퓨터가 system call 실행하여 커널에 제어권 넘겨줌
-
-
과정
-
현재 실행되고 있는 프로세서의 PCB에 현재 프로세서의 상태정보를 복사
-
CPU에 새로 실행할 프로세스의 PCB 정보를 복사하여 문맥을 전환한다.
-
Thread
-
프로세스는 Thread라는 다수의 실행 유닛으로 구성
-
각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되고, 동일한 코드와 전역(global) 데이터를 공유
-
멀티 쓰레딩 : 하나의 CPU(프로세서)가 여러 개의 제어 흐름을 실행 (각 thread가 프로세스의 메모리 공유)
-
멀티 프로세서 : 여러 개의 CPU(프로세서)로 여러 개의 제어 흐름을 실행 (각 프로세스가 독립적인 메모리 가짐)
가상 메모리
아래에서부터, 주소 값이 가장 작은 부분부터
-
프로그램 코드 & 데이터
-
힙 (run-time heap)
-
런타임에 동적으로 크기가 변동 (주로 malloc, free로 인해)
-
-
공유 라이브러리
-
스택 stack
-
컴파일러가 함수 호출을 위해 사용하는 사용자 stack
-
함수 호출 - 스택 증가 // 리턴시 - 스택 감소
-
-
커널 가상 메모리
Computer Systems, A Programmer's Perspective - Bryan & O'Hallaron 책으로 공부하는 중
fast campus OS 강의도 함께 듣는 중
'컴퓨터 시스템' 카테고리의 다른 글
[컴퓨터 시스템] 뮤텍스와 세마포어 (0) | 2020.10.15 |
---|---|
[컴퓨터 시스템] 스레드 (0) | 2020.10.14 |
[컴퓨터 구조] 예외 상황 (0) | 2020.10.11 |
[컴퓨터 시스템] 프로세스와 스케줄러 (0) | 2020.10.10 |
[컴퓨터 시스템] 가상 메모리 (0) | 2020.10.07 |