상세 컨텐츠

본문 제목

[운영체제] 시스템콜(system call) & 이중모드

CS/운영체제

by young1403 2023. 9. 15. 13:34

본문

커널(kernel)이란 ? 

kernel은 씨앗이라는 의미를 가진 단어입니다. 이와 유사하게 운영체제에서의 커널은 운영체제에서 핵심 역할을 하며 컴퓨터 유형에 관계없이 하드웨어의 모든 주요 기능을 제어하기 때문에 붙여진 이름이라고 볼 수 있습니다. 커널은 프로세스 관리, 메모리관리, 자원 접근 및 할당, 파일시스템 관리 등이 있습니다.

 

[ 운영체제의 동작 ]

운영체제는 사용자가 사용하는 응용프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호합니다. 만약 사용자가 사용하는 응용프로그램에서 CPU, 하드웨어, 메모리 등에 마음껏 접근할 수 있다면 자원이 무질서하게 관리될 것이고 보안등 시스템에 큰 악영향을 끼칠 수 있습니다.

 

그래서 운영체제는 여러 응용프로그램들이 자원에 접근하려할 때 관리자같은 역할로 프로그램들의 자원 접근을 대신해줍니다. 그렇기에 프로그램이 자원에 접근하려 할 때 운영체제에 요청을 하여 (운영체제를 거쳐) 자원에 접근할 수 있습니다. 이 말은 '운영체제 코드를 실행하려한다'라는 말과 같습니다. 

사용 프로그램 -> 운영체제 & 커널 영역 내의 데이터 저장코드를 실행 -> 하드디스크에 저장

과 같은 순서로 볼 수 있습니다.

 

 

[ 이중 모드 (dual mode) ]

이러한 운영체제는 이중모드로써 동작합니다. 이중모드란 CPU가 명령어를 실행하는 모드를 크게 (1)사용자모드와 (2)커널모드 로 구분하는 방식입니다. CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널모드로도 실행할 수 있습니다.

 

[ 사용자 모드(user mode) ]

운영체제 서비스를 제공받을 수 없는 커널 영역의 코드를 실행할 수 없는 모드입니다. 일반적인 응용프로그램은 기본적으로 사용자모드로 실행되고, 사용자모드 실행중인 cpu는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없습니다.(자원에 접근이 불가능한 모드입니다.)

 

[ 커널 모드 (kernel mode) ]

그럼 자원에 접근하려면 어떻게 하느냐? 커널모드로 동작합니다. 커널모드는 운영체제 서비스를 제공받을 수 있는 모드로써 커널 영역의 코드를 실행해 자원에 접근하는 (모든)명령어를 실행할 수 있습니다.(자원에 접근이 가능한 모드입니다.)

 

[ 시스템 콜 (System Call) ]

기본적으로 사용자 모드로 프로그램을 실행하기 때문에 운영체제에 접근하려면 운영체제에 요청을 보내 커널모드로 전환이 되어야 합니다. 이때 자원에 접근하기 위한 요청을 시스템 호출(System Call)이라고 합니다. 사용자 모드로 실행되는 프로그램은 System Call을 통해 커널 모드로 전환하여 자원에 접근할 수 있습니다.

 

 

[ 인터럽트 ( Interrupt ) ]

위와 같은 시스템콜은 소프트웨어 인터럽트의 한 종류입니다. 그래서 시스템콜의 동작 방식은 인터럽트 처리와 유사합니다. system call을 발생시키는 명령어가 실행되면 cpu는 지금까지의 작업을 백업하고, 커널 영역에서 자원에 접근하는 (시스템 호출을 수행하는) 코드를 실행한 뒤 . 다시 기존의 프로그램으로 돌아와 실행을 계속해 나갑니다. 이때 커널영역에 접근하는게 사용자모드에서 커널모드로 전환되고 작업이 끝나고 프로그램으로 돌아오면 다시 사용자 모드로 전환된다고 볼 수 있습니다. 이렇게 프로그램은 사용자 모드와  커널 모드를 번갈아가며 실행하게 됩니다.

 

 

이렇게 여러 프로그램들이 실행됨을 볼 수 있고 이것을 운영체제가 관리해줍니다. 하나의 CPU는 하나의 프로세스만 처리할 수 있는데, 이는 멀티프로세스의 동시성과 병렬성 개념을 찾아보시면 도움이 될 것 같습니다. 기회가 되면 추후에 포스팅해보도록 하겠습니다.

 

정리해보자면 모든 프로세스는 자원에 접근을 필요로 합니다. 그 접근은 운영체제를 통해서 접근할 수 있고 사용자모드에서 커널모드로 전환하여 동작해야함을 알 수 있었습니다. system call의 동작을 통해 운영체제의 서비스를 받아 자원에 접근이 가능했으며, 커널의 주 역할은 프로세스 관리, 메모리관리, 자원 접근 및 할당, 파일시스템 관리 등이 있음을 알 수 있었습니다.

댓글 영역