티스토리 뷰

반응형

CPU(Central Processing Unit)는 컴퓨터의 핵심적인 처리 장치로, 명령어를 실행하고 데이터를 처리하는 역할을 담당한다. CPU는 프로세서 내부에 다양한 하드웨어 구성 요소와 기능을 포함하고 있다. 그리고 운영체제는 CPU와 하드웨어들의 자원을 효율적으로 관리해서 응용 프로그램이 원활하게 동작되도록 한다.

 

운영체제는 프로세스들을 처리하기 위해 CPU의 기능과 시스템 자원에 접근할 수 있어야 한다. 하지만 컴퓨터의 주요한 자원에 무분별하게 접근할 수 있는 것은 아니다. 운영체제는 접근할 수 있는 권한이 부여된 요청만 CPU에 접근을 허락한다. 이 권한은 4가지로 분류되며, 접근 권한들을 분류하여 나눈 것을 CPU Protection Ring이라고 한다.

 


CPU Protection Ring

CPU Protection Ring(또는 CPU Ring Level)은 운영체제에서 프로세스와 시스템 자원 간의 보안과 권한을 관리하기 위해 존재한다. CPU Protection Ring은 CPU로 부터의 권한 모드(권한 레벨)을 의미한다. CPU는 다중 권한 모델을 사용하여 프로세스가 시스템 자원에 대한 접근 권한을 제어하고 보호하는데 사용한다.

 

CPU Protection Ring은 일반적으로 0부터 3까지의 숫자로 표현되며, 낮은 숫자일수록 더 높은 권한을 나타낸다. 주로 0부터 3까지의 권한 레벨이 사용되며, 0은 가장 높은 권한을 가진 커널 모드(Kernel Mode)이고, 3은 가장 낮은 권한을 가진 사용자 모드(User Mode)이다.

 

권한 레벨이 높은 커널 모드(Level 0)는 운영체제와 시스템 자원에 대한 접근이 가능하다. 반면에 사용자 모드(Level 3)는 프로세스가 제한된 자원에만 접근할 수 있으며, 시스템 자원에 직접 접근하는 것은 제한된다. 

 

운영체제는 CPU Protection Ring을 사용하여 사용자 프로세스 간의 충돌, 잘못된 접근, 시스템 자원의 남용 등을 방지하고, 운영체제의 안정성을 유지할 수 있다. 그리고 시스템 보안을 강화하여 악성 코드나 해킹 시도로부터 시스템을 보호한다.

 


커널 모드(Kernel Mode)

커널 모드는 운영체제의 핵심 기능을 수행하는 커널(Kernel)이 실행되는 모드이다. 커널은 운영체제의 핵심 기능을 수행하고, 하드웨어와 직접 상호작용할 수 있는 권한을 가지고 있다. 

 

커널 모드에서 실행되는 코드는 시스템 자원에 대한 접근 권한이 허용되며, 하드웨어 제어, 메모리 관리, 인터럽트 처리 등의 중요한 작업을 수행할 수 있다.

 

커널 모드에서 실행되는 코드는 높은 권한과 특권을 가지므로 잘못된 동작으로 시스템에 심각한 영향을 줄 수 있으니 신중하게 관리되어야 한다.

 


사용자 모드(User Mode)

사용자 모드는 응용 프로그램이 실행되는 모드이다. 사용자 모드에서 실행되는 코드는 제한된 권한을 가지며, 운영체제의 자원에 직접 접근할 수 없다. 대부분의 응용 프로그램은 사용자 모드에서 실행되며, 사용자의 작업을 처리하고 결과를 출력하는 등의 기능을 수행한다.

 

사용자 모드에서 실행되는 코드는 시스템의 안전성과 보안을 위해 제한된 자원에만 접근할 수 있으며, 중요한 작업을 수행해야 하는 경우엔 커널 모드로의 전환을 요청할 수 있다.

 


실제 동작 예시

우리가 작성하는 코드들을 실행하면 응용 프로그램이 된다. 응용 프로그램이 파일과 같은 주요 자원에 접근할 때 어떻게 동작되는지 예시로 살펴보자. 

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

// 1단계
int main(){
	// 2단계 ~ 5단계
	int fd = open("data.txt", O_READ_ONLY);

	// 6단계, 7단계
	if(fd == -1){
		printf("Error!! 파일 열기 실패");
		return -1;
	}else{
		printf("파일 열기 성공!");
		close(fd);
		return 1;
	}
}
1단계 : 사용자 모드에서 응용 프로그램 실행
2단계 : open() 함수를 사용하면, 시스템 콜을 호출하여 하드웨어의 파일을 읽어와 달라고 요청함
3단계 : 운영체제는 커널 모드로 전환
4단계 : 운영체제는 파일 열기 함수를 처리하는 sys_open()이란 커널 함수를 호출
5단계 : CPU에서 파일 열기의 로 레벨(low-level) 연산 수행
6단계 : 응용 프로그램에게 파일 열기 결과값 전달 후 사용자 모드로 전환
7단계 : open() 함수 이후의 코드(프로그램) 계속해서 실행

 


요약

커널 모드와 사용자 모드는 하드웨어의 권한이나 CPU의 특권 명령어 등을 통해 구분된다. 운영체제는 프로세스를 생성할 때 사용자 모드에서 시작하며, 특정 시스템 호출이나 예외 상황이 발생할 때 커널 모드로 전환하여 필요한 작업을 수행한다.

 

이 작업을 통해 운영체제는 다중 프로세스 환경에서 프로세스들을 관리하고, 보안 및 안정성을 유지하며, 자원을 효율적으로 관리할 수 있다.

 

반응형
댓글
공지사항