사용자 모드와 커널 모드에 알아봅시다.
CPU도 권한 모드를 가지고 있는데, 대표적으로 2가지가 있습니다.
1) 사용자 모드(user mode (by application))
2) 커널 모드(kernel mode (by OS)) : 특권 명령어 실행과 원하는 작업 수행을 위한 자원 접근을 가능하게 하는 모드
인텔 CPU를 기준으로, Ring 0, 1, 2, 3 이렇게 4가지가 존재하는데, 대부분의 운영체제는 Ring 0과 3만 사용합니다.
Ring3을 사용자 모드로 지칭하고, Ring0을 커널 모드로 지칭합니다.
즉, Ring 3모드에서 Ring0 특권 명령을 사용하려고 하면 실행되지 않는 것입니다.
이렇게, 우리가 만드는 프로그램이나 사용하는 프로그램은 맨 위인 응용 프로그램인데요,
그 응용프로그램이 이러한 기능을 한다고 가정합니다.
1) 1~1000까지 더하고,
2) 파일에서 데이터를 가져온다.
3) 가져온 데이터와 1~1000까지 더한 값을 더하고, 출력한다.
이렇게 가정했을 때, 응용 프로그램은 1번을 수행하고, 2번이 시스템 콜을 통해 디스크에서 데이터를 가져옵니다.
그리고 데이터를 가져왔을 때, 응용 프로그램은 다시 3번을 수행하게 됩니다.
그래서 어떤 명령은 사용자 영역에서 실행이 되고,
시스템 호출 인터페이스를 통과하는 명령은 커널 영역에서 실행이 된다는 것입니다.
정리하자면,
1) 커널 모드에서만 실행 가능한 기능이 있다.
2) 커널 모드로 실행하려면 반드시 시스템 콜을 사용해야 한다. (거쳐 간다)
3) 시스템 콜은 운영체제에서 제공한다.
이는 함부로 응용 프로그램이 전체 컴퓨터 시스템을 해칠 수 없음을 의미하기도 합니다.
< 잠깐 쉬어가기 >
응용 프로그래머는 API를 응용하여 사용자 프로그램을 만드는 직업이고,
시스템 프로그래머는 Shell, API, System Call 등을 만드는 직업이 됩니다.
아하~ㅋㅋ
코드를 통해 보면,
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd;
fd = open("data.txt".O_RDONLY); //open() 시스템 콜 호출 -> 커널 모드로 전환
//open()함수를 처리하는 sys_open() 커널 함수 호출
//파일을 연 후 사용자 모드로 전환
if (fd == -1) // 계속해서 프로그램 실행
{
printf("Error: can not open file\n");
return 1;
}
else
{
printf("File opened and now close_\n");
close(fd);
return ();
}
}
이렇게 볼 수 있습니다. 저장매체에 접근하기 위하여 시스템 콜을 호출하고,
커널 모드로 전환됩니다. 그리고 운영체제 안의 open함수를 처리하는 sys_open() 커널 함수가 실행되고,
파일을 읽은 결과가 응용 프로그램에 전달됩니다. 그리고, 다시 응용 프로그램을 수행하는 것입니다. (사용자 모드)
출처
이 글의 상당 부분은 패스트캠퍼스 컴퓨터 공학 기초 강의를 참고하였습니다.
개인 학습, 복기용이기 때문에 복제를 금합니다.
관심이 있으시다면 같이 공부하시거나, 해당 관련 강의를 직접 수강하시는 것을 추천합니다!
도움이 되시거나 더 좋은 지식을 공유하고 싶으시다면
아래의 댓글로 자유롭게 남겨주세요.
'운영체제' 카테고리의 다른 글
6. 운영체제 - 스케쥴링 알고리즘 (0) | 2019.12.27 |
---|---|
5. 운영체제 - 스케쥴링 (배치 처리, 시분할 시스템, 멀티 프로그래밍) (0) | 2019.12.26 |
3. 운영체제 - 시스템 콜(System Call) (0) | 2019.12.24 |
2. 운영체제의 역사 (0) | 2019.12.23 |
1. 운영체제의 역할 (0) | 2019.12.23 |