말감로그

크래프톤 정글 WEEK09 DAY72 - 9주차 퀴즈 준비 & 퀴즈 풀이 본문

Krafton jungle

크래프톤 정글 WEEK09 DAY72 - 9주차 퀴즈 준비 & 퀴즈 풀이

habbn 2024. 3. 19. 13:48
728x90

User mode vs Kernel mode

 

유저모드 : 유저 모드에서는 응용 프로그램이 실행된다. 응용 프로그램이 자신의 메모리 공간 내에서만 실행되며, 시스템 자원에 직접적으로 접근할 수 없다. 시스템 콜을 통해 커널 모드의 서비스를 요청하여 시스템 자원에 접근한다.

 

커널 모드 : 커널 모드는 운영 체제의 핵심 부분인 커널이 실행되는 모드이다. 커널 모드에서는 프로세스가 전체 시스템 자원에 대한 접근 및 제어 권한을 가지며, 특권 명령어를 실행할 수 있다.

 

유저모드와 커널 모드 간의 전환이 필요한데, 이러한 모드 간의 전환은 운영체제에 의해 관리된다. 이러한 모드 간의 요청은 시스템의 안전성과 보안을 유지하는데 중요한 역할이다.

 

Register vs Memory

레지스터와 메모리는 컴퓨터 시스템에서 데이터를 저장하고 처리하는 데 사용되는 주요 기억장치이다.

 

레지스터 : cpu내부에서 빠르게 연산을 수행하고 데이터를 임시로 저장하는 데 사용되며, 주로 연산에 필요한 데이터나 연산 결과 그리고 명령어 실행을 제어하는 데 사용된다.

 

메모리 : 프로그램이나 데이터를 영구적으로 저장하고 cpu가 필요할 때 접근할 수 있는 기억장치이다. 

주 기억장치(RAM)보조 기억장치(HDD, SDD)


User Stack

프로그램이 함수 호출을 관리하고 지역 변수를 저장하는 중요한 메모리 구조이다. 사용자 모드에서 실행되는 프로그램의 실행 컨텍스트에서 사용된다.

 

1. 함수 호출 관리 : 함수 호출 시에 호출된 함수의 인자, 반환 주소 및 지역 변수와 같은 데이터를 저장한다.

2. 스택 구조 : LIFO 구조를 따른다. 마지막에 추가된 데이터가 먼저 제거되는 구조.

3. 스택 포인터 : 스택 포인터는 현재 스택의 최상단 주소를 가리키며, 스택에 데이터를 추가하거나 제거할 때마다 업데이트된다.

4. 보안 및 보호 : 스택 오버플로우와 같은 공격을 방지하기 위해 스택의 경계를 지키는 보호 매커니즘 적용될 수 있다.

 

System Call

사용자 모드에서 실행 중인 프로그램이 운영체제 커널의 기능을 호출하는 메커니즘이다. 시스템 콜은 일반적으로 운영체제의 서비스에 접근하기 위해 사용된다. 시스템 콜은 운영 체제와 사용자 프로그램 간의 효율적이고 안전한 상호작용을 가능하게 한다.

 

-> 유저 프로그램이 프로세스 생성이나 파일 저장 등 커널 시스템 서비스를 사용하려면 시스템 호출하고 운영체제에게 요청하면 된다. 작업을 수행하고 시스템 호출이 완료된 후 사용자에게 반환한다.

 

File Descriptor

컴퓨터 시스템에서 파일이나 다른 입출력 장치에 접근하기 위한 추상화된 개념이다. 파일 디스크립터는 각각의 열린 파일 또는 입출력 장치에 할당되며, 해당 파일이나 장치를 식별하는 데 사용된다.

 

1. 파일 식별 : 파일 디스크립터는 열린 파일이나 장치를 식별하는 데 사용된다.

2. 파일 조작 : 파일 디스크립터를 사용하여 파일을 읽거나 쓰는 등의 입출력 작업을 수행할 수 있다.

3. 파일 관리 : 파일 디스크립터를 사용하여 파일을 열고 닫는 등의 파일 관리 작업을 수행할 수 있다.

 

Cache

캐시는 컴퓨터 시스템에서 데이터나 명령어의 빈번한 접근을 위해 사용되는 고속 데이터 스토리지이다. 일반적으로 느린 주 기억장치에 비해 빠른 속도로 데이터에 접근할 수 있는 특성을 가지고 있다. 

1. 시간 지역성 : 한 번 액세스 된 데이터나 명령어가 다시 액세스 될 가능성이 높다.

2. 공간 지역성 : 한 번 액세스 된 데이터나 명령어와 인접한 데이터나 명령어가 곧 액세스 될 가능성이 높다.캐시


Atomic Operation

원자적 연산은 여러 단계로 이루어진 작업이 전체가 완전히 실행되거나 전혀 실행되지 않는 것을 보장하는 연산이다. 원자적 연산은 동시에 여러 스레드나 프로세스가 접근하는 공유 자원을 안전하게 업데이트하고 동기화하는 데 사용된다.

 

1. 원자성 : 원자적 연산은 실행되는 동안 다른 스레드나 프로세스가 중간에 개입하지 않는다. 즉, 연산이 시작되면 중간에 중단되지 않고 전체가 완전히 실행된다.

2. 일관성 : 원자적 연산은 연산이 실행되기 전과 실행된 후의 상태 사이에 일관성을 유지한다. 즉, 연산이 완료된 후에는 시스템이 일관된 상태로 남는다.

3. 고립성 : 원자적 연산은 동시에 실행되는 다른 연산과 격리된다. 다른 연산이 진행 중인 동안에도 원자적 연산은 영향을 받지 않고 실행된다.

4. 지속성 : 원자적 연산이 완료된 후에는 결과가 영구적으로 유지된다. 시스템이 실패하거나 중단되어도 원자적 연산이 적용된 결과는 보존된다.

 

원자적 연산은 다수의 스레드나 프로세스가 동시에 공유 자원을 업데이트하는 경우 발생할 수 있는 경쟁 상태를 방지하기 위해 사용된다. 

 

rax register

X86아키텍처에서 사용되는 64비트 범용 레지스터이다.

 

1. 일반 명령어와 데이터 저장 : 일반적인 산술 및 논리 명령어에서 데이터를 저장하거나 결과를 보관하는 데 사용된다.

2. 함수 반환값 : 함수가 호출되고 실행을 완료한 후, 결과 값을 반환하는 데 rax 레지스터가 사용된다. 함수가 반환하는 값을 rax에 저장하고 호출 지점으로 이 값을 전달한다.

3. 시스템 호출 : 시스템 호출을 수행할 때, 호출한 시스템 호출의 결과 값을 rax 레지스터에 저장한다. 이 결과 값은 호출한 프로세스에게 반환되는 값을 나타낸다.

4. 계산 및 조작 :  데이터를 조작하거나 계산하는 데에도 rax 레지스터가 사용된다. 다른 레지스터나 메모리에서 읽어 들인 값을 rax에 저장하여 계산하고 결과를 저장하는 데 사용된다.


32 bit OS vs 64 bit OS

32 비트와 64비트 운영 체제는 시스템에서 사용되는 데이터 단위의 크기를 나타낸다.

 

1. 주소 공간의 크기

32 비트 os : 32 비트 주소 공간 사용. 최대 4GB

64 비트 os : 64 비트 주소 공간 사용. 최대  180억 기가바이트

 

2. 호환성

32 비트 os : 32비트 운영체제만 실행

64 비트 os : 32비트, 64비트 운영체제 모두 실행

 

3. 멀티 태스킹 

64비트 운영체제는 cpu가 어떤 작업을 수행할 때마다 클럭 사이클 당 더 많은 정보를 처리할 수 있기 때문에 멀티태스킹과 애플리케이션 간의 잦은 전환이 지연 없이 가능해져 사용자가 여러 애플리케이션에서 동시에 작업할 수 있다.

 

4. 컴퓨터 성능

32와 64는 클럭 사이클 당 cpu에서 처리할 수 있는 데이터 비트 수를 의미하므로 처리할 수 있는 데이터가 많을수록 시스템 속도가 빨라지며, 64비트 운영체제는 32 비트 운영체제에 비해 동시에 더 많은 양의 정보를 처리할 수 있으므로 성능이 크게 향상된다.

 

5. 자원 가용성

64비트 운영체제는 32비트 운영체제에 비해 시스템 리소스를 더 효율적으로 활용할 수 있다.

 

Interrupt

인터럽트는 컴퓨터 시스템에서 발생하는 이벤트로, CPU가 현재 실행 중인 프로그램의 흐름을 일시적으로 멈추고 다른 작업을 수행하는 것을 허용한다. 

 

1. 하드웨어 인터럽트

- 외부 인터럽트 : 외부 장치(키보드, 마우스, 디스크 컨트롤러 등)에서 발생하는 인터럽트

- 타이머 인터럽트 : 타이머 장치에서 일정한 간격으로 발생하는 인터럽트 

- 입출력 인터럽트 : 입출력 장치에서 데이터 전송이 완료되거나 입출력 오류가 발생했을 때 발생하는 인터럽트

 

2. 소프트웨어 인터럽트

- 시스템 콜 : 프로그램이 운영 체제 서비스를 요청할 때 발생하는 인터럽트. 주로 프로세스가 운영 체제에 대해 파일 입출력, 메모리 할당 및 해제, 프로세스 관리 등의 작업을 요청할 때 사용된다.

- 예외 : 프로세스가 실행 중에 예외적인 조건이 발생했을 때 발생하는 인터럽트이다.

 

* 트랩 : 운영체제와 프로세서에서 관리되며, 프로세스가 트랩을 발생시키면 운영체제가 이를 적절하게 처리한다. 일반적으로 트랩은 오류를 처리하거나 예외 상황을 조치하기 위해 운영 체제의 커널 코드로 제어를 이전하며, 필요에 따라 프로세스의 실행을 중단하거나 종료할 수 있다.


Segmentation Fault

Segmentation Fault는 프로그램이 잘못된 메모리를 참조하거나 접근할 때 발생하는 오류이다.

 

1. Null Pointer Deference(널 포인터 참조) : 프로그램이 널 포인터를 역참조 하려고 할 때 발생한다.

2. 메모리 접근 오류 : 프로그램이 할당되지 않은 메모리를 읽거나 쓰려고 할 때 발생한다.

3. 스택 오버플로 : 프로그램이 스택 메모리를 너무 많이 사용하여 스택 영역을 벗어나게 되면 발생한다.

4. 힙 오버플로 : 동적으로 할당된 메모리를 사용하는 경우, 할당된 메모리 영역을 넘어서 데이터를 쓰려고 할 때 발생한다.

 


퀴즈 풀이

 

1. 커널 모드에서 실행될 수 있는 작업의 예를 들고, 이러한 작업들이 사용자 모드에서 실행되지 않는 이유를 설명하세요.

 

공유 자원 관리는 운영 체제의 중요한 기능 중 하나로, 주로 커널 모드에서 실행된다.

예를 들어, 파일 시스템, 메모리, 프린터 등과 같은 자원은 여러 프로세스에 의해 동시에 요청될 수 있으며, 이에 대한 접근과 사용을 적절히 관리하는 것이 필수적이다. 커널 모드에서는 이러한 자원들에 대한 접근을 제어하고, 충돌이나 데이터 손상을 방지하는 역할을 한다.

 

사용자 모드에서는 이러한 공유 자원의 직접 관리를 수행하지 않는다. 이는 여러 사용자 또는 프로세스가 자원에 직접 접근할 경우 데이터의 일관성과 안정성이 위협받을 수 있기 때문이다.

 

 

2. 운영 체제에서 컨텍스트 스위칭 발생하는 과정에서 어떤 정보가 저장되고 복원되는지 설명하세요.

 

컨텍스트 스위칭 과정에서 운영 체제는 현재 프로세스의 상태를 저장하고, 다음에 실행할 프로세스의 저장된 상태를 보원한다.

저장되는 정보에는 프로세스의 프로그램 카운터, 레지스터 상태, 메모리 관리 정보, 열린 파일 목록 등이 포함된다.

 

 

3. fysnc() 함수의 작동 원리를 설명하고, 이 함수가 파일 시스템에서 어떤 역할을 하는지 서술하세요.

또한 fsync()를 사용할 때 고려해야 할 성능상의 영향에 대해서도 설명하세요.

 

fysnc() 함수는 열려 있는 파일 디스크립터와 관련된 모든 수정된 데이터를 디스크에 동기화한다.

이는 파일 쓰기 작업이 메모리에만 저장되는 것이 아니라, 실제 저장매체에도 반영되도록 보장하는 역할을 한다.

fysnc()의 중요한 역할 중 하나는 시스템이 예기치 않게 중단되더라도 데이터의 무결성을 보장하는 것이다.

 

fysnc()를 사용할 때의 주요 성능상의 영향으로는 디스크 I/O작업이 증가하여 시스템의 전반적인 성능 저하가 발생할 수 있다는 점을 고려해야 한다. 특히 빈번한 fysnc() 호출은 디스크의 작업 부하를 증가시키고, 결과적으로 시스템의 반응 속도를 늦출 수 있다.

 

 

4. 멀티레벨 피드백 큐(MLFQ) 스케줄러를 구현하는 시스템에 5개의 프로세스가 있다. 가장 마지막에 완료되는 프로세스는 무엇인가요? 큐 별로 gantt chart를 그려서 풀어보세요.

 

 

728x90