I. Introudction to Operating Systems
운영체제(OS)란, 컴퓨터에서 실행되고 컴퓨터 하드웨어를 관리하는 소프트웨어로, 다양한 애플리케이션 소프트웨어의 효율적인 실행을 위해 공통 서비스를 제공한다.
✅가상화 (Virtualization)
가상화란, 단일 CPU가 여러 소프트웨어를 동시에 실행하는 것처럼 보이게 하는 것을 의미한다.
즉, 1개를 여러 개처럼 보이게하는 환상을 주는 것이다.
* 추상화(Abstraction)와 헷갈리지 말자.
하드웨어(CPU, Memory, Disk)를 추상화한 것이 소프트웨어(OS)인 것이다.
✅CPU의 가상화
하드웨어의 도움을 받아 환상(illusion)을 제공한다.
단일 CPU를 겉보기에 많은 수의 CPU가 있다는 환상을 제공하여 여러 개의 프로그램이 동시에 수행되게 한다.
기본적으로 OS는 가상화라고 하는 일반 기술을 통해 수행한다.
- OS는 물리적 리소스(프로세서, 메모리)를 사용하여 보다 일반적이고 강력하고 사용하기 쉬운 가상의 형태로 변환한다.
- 사용자가 OS에 할 일을 알려주고 가상 머신의 기능을 사용할 수 있도록하고, OS는 또한 사용자가 호출할 수 있는 일부 인터페이스(API)를 제공한다.
- 가상화를 통해 많은 프로그램이 실행되고, 많은 프로그램이 자신의 명령과 동시에 엑세스하고, 많은 프로그램이 장치에 엑세스하기 때문에 OS가 자원관리자라고 불린다.
✅메모리의 가상화
메모리를 읽으려면 저장된 데이터에 엑세스 할 수 있는 주소를 지정해야 하고, 메모리를 쓰거나 업데이트하려면 주어진 주소에 쓸 데이터를 지정해야 한다.
메모리도 실제로 하나지만, 마치 여러 개인 것처럼 가상화를 해서 프로세스에 나눠준다.
이 프로세스가 엑세스하는 메모리를 가상 주소 공간이라고 부른다. (이 가상 주소는 사용자에게 서로 다른 프로세스여도 동일한 주소로 보인다.)
OS는 각 프로세스의 주소 공간을 실제 메모리에 매핑한다.
이때 하나의 실행 중인 프로그램 내의 메모리 참조는 다른 프로세스의 주소 공간에 영향을 미치지 않는다.
✅병행성 (Concurrency)
OS는 한 번에 많은 프로세스를 저글링 하여 먼저 한 프로세스를 실행한 다음, 다른 프로세스를 실행하면서 문제들이 존재한다.
현대의 멀티 스레드 프로그램도 동시성 문제가 있다.
✅지속성 (Persistence)
휘발성인 DRAM에 따라 데이터 저장은 쉽게 데이터를 잃을 수 있다.
전원이 꺼지더라도(혹은 시스템이 손상되더라도) 데이터를 지속적으로 저장하려면 하드웨어와 소프트웨어가 필요하다.
II. Process Abstraction
소프트웨어는 프로그래밍 언어로 작성된 하나 이상의 프로그램으로 구성된다.
프로그램이 실행되지 않을 때는 수동적인 상태로 남아있으며, 일부 영구적인 메모리에 파일 형태로 저장된다.
운영체제 관점에서 프로그램이란 실행 가능한 파일이다.(a.out UNIX/Linux, .exe Windows)
소스코드(.c .java) 같은 경우 고급 언어로 작성되었기 때문에 실행 가능하지 않으며, 프로그램이 아니다.
프로그램이 실행되면 프로세스가 된다. (즉, 프레세스 == 실행 중인 프로그램)
하나의 프로그램은 주어진 컴퓨터에서 여러 인스턴스로서 여러 프로세스로 동시에 실행될 수 있다.
(예를 들어, 워드 프로세서는 여러 문서를 열 수 있는데 각각의 문서는 별개의 프로세스로 간주되는 것이다.)
위 사진에의 메인 메모리에서 볼 수 있는 커널 프로세스는 메인 메모리의 커널 공간에 상주하며, 커널 모드에서 OS 커널 코드를 실행한다.
OS 내의 모든 프로세스는 다른 프로세스에 의해 생성된다.
init 프로세스는 원래 생성자로 간주된다.
각 프로세스는 여러 가지 link를 가지게 되는데, 만약 프로세스가 부모나 자식, 형제가 없을 경우 해당 연결은 NULL 값을 가리킨다.
✅ Process API
1. 프로그램 코드를 메모리로 로드 -> 프로세스의 주소 공간으로 로드
2. 프로그램의 런타임 스택 할당
함수 인자로 스택 초기화 (main()의 argc, argv)
3. 프로그램의 힙 생성
명시적으로 요청된 동적 할당(malloc(), free())
4. OS는 다른 초기화 작업 진행
I/O 셋업 (각 프로세스는 기본적으로 3개의 file descriptors가 할당)
5. 진입점인 main()에서 프로그램 시작
OS는 CPU 제어권을 새로 생성된 프로세스로 전달
🔴Mode of Execution
하드웨어는 다양한 실행 모드를 제공하여 OS를 지원한다.
- User Mode
- 권한을 덜 가진 모드를 보통 사용자 모드라고 한다. (사용자 프로그램들이 일반적으로 이 모드에서 수행)
- 응용 프로그램은 하드웨어 리소스에 완전히 엑세스 가능
- Kernel Mode
- 더 많은 권한을 가진 모드는 시스템 모드, 제어 모드라고 한다.
- OS는 시스템의 모든 리소스에 엑세스 가능하다.
- 커널 모드에서 수행되는 소프트웨어는 처리기와 모든 명령들, 레지스터들, 그리고 메모리를 제어 가능하다.
- 사용자 모드 -> 커널 모드
- 사용자가 OS 서비스를 호출할 때 발생한다.
- 인터럽트가 OS 커널 수행을 촉발시킬 때 발생한다.
- 커널 모드 -> 사용자 모드
- 제어가 그 OS 서비스에서 사용자 프로세스로 복귀할 때 발생한다. (return from syscall)
'3-2 학기 > Operating Systems' 카테고리의 다른 글
[운영체제] xv6 구조 및 동작 원리 (0) | 2024.10.29 |
---|---|
[운영체제] Memory API (0) | 2024.10.14 |
[운영체제] The Abstration : Address Space (0) | 2024.10.13 |