운영 체제가 관리하는 칩과 동일한 칩에서 어떻게 운영 할 수 있습니까?


17

운영 체제 (위키 백과, 기술 사이트 등의 기본 자료 읽기)에 대한 필독에서 운영 체제는 프로그램과 응용 프로그램이 효율적이고 안전하게 하드웨어와 상호 작용할 수있는 프로그램이라는 것을 배웠습니다.

그러나 운영 체제가 컴퓨터를 작동해야 할 때 컴퓨터 작동을 감독하는 방법에 대해서는 혼란 스럽습니다.

무슨 뜻이야? 글쎄, 운영 체제가 작동한다고 상상하는 방법은 컴퓨터에 두 개의 CPU가 있다는 것입니다. 하나는 항상 OS를 실행하고 다른 하나는 OS가 컴퓨터를 실행하는 데 사용합니다. 그러나 OS가 다른 프로세스와 동일한 CPU에서 실행되고 있음이 밝혀졌습니다. 이것은 직원과 동일한 생산 라인에서 작업해야하는 관리자와 같으며 다른 직원과 함께 작업 할 때만 전동 공구를 사용할 수 있습니다. 그는 직원이 약간 징계되지 않으면 명령을 내릴 능력이 없기 때문에 매우 효과적인 관리자가 아니 었습니다.

그렇다면 OS가 다른 모든 프로세스간에 공유해야하는 동일한 CPU에서만 시간의 일부만 실행되도록하려면 어떻게해야합니까? 이것이 어떻게 작동합니까?


1
관리자는 직원의 전동 공구를 사용해서는 안됩니다! 대신, 직원들에게 작업용 전동 공구가 있는지 확인해야합니다.
MSalters

답변:


15

최신 CPU는 OS를 어느 정도까지 인식하고 있습니다. 그들은 그것을 주장하는 첫 번째 사람을위한 몇 가지 "전동 도구"를 제공합니다. 일반적으로 이것은 부트 로더이며, OS에 제어권을 넘겨줍니다. 하나는 일반적으로 "커널 모드"대 "사용자 모드" 또는 "링 0"대 "링 3" 을 말하여 여분의 권한을 가진 하나의 프로세스와 나머지 프로세스를 구별합니다.

이러한 "전동 도구"는 리소스 관리를위한 특정 권한입니다. 메모리 제어, 하드웨어 액세스 및 중단없이 사용자 수준 코드 실행 시간.

CPU는 다음 이벤트 중 하나가 발생하면 특별한 권한으로 OS를 실행합니다.

  1. 사용자 모드 프로세스는 명시 적으로 제어를 커널 모드 프로세스로 넘깁니다. 이것을 syscall 이라고합니다 .
  2. 커널 모드 프로세스는 특별한 권한을 사용하여 특정 이벤트에 등록 할 수 있습니다 (예 : 외부 하드웨어가 CPU에 특수 신호를 보내거나 사용자 공간 프로세스가 예약 된 리소스에 액세스하려고 시도 함). 이러한 상황이 발생하면 CPU는 사용자 모드 프로세스를 즉시 중지하고 커널 모드 프로세스를 제어합니다. 보통 하나는 인터럽트 에서 말합니다 .

따라서 칩이 내장되어 있기 때문에 OS는 동일한 칩에서 실행될 수 있습니다. 자체적으로 특별한 권한을 보유 할 수 있습니다. CPU는 이러한 특별한 권한없이 언제든지 다른 모든 코드를 중단하고 제어권을 OS에 넘겨 줄 수 있습니다.

지원이 매우 제한된 일부 칩 (예 : 마이크로 컨트롤러 )에는 특수 권한 코드에 대한 지원이 없습니다. 이러한 칩은 일반적으로 OS없이 실행됩니다. 하나의 큰 프로그램 만 실행되고 하드웨어에 직접 액세스 할 수 있으며 하드웨어 인터럽트에 응답해야하며 언제든지 모든 리소스에 액세스 할 수 있습니다. 그 프로그램이 하나의 실수를하면 보통 모든 것이 충돌합니다.


17

가장 기본적인 형태로, 운영 체제는 올바르게 작동하는 프로세스에 의존하며 때때로 제어권을 운영 체제에 넘겨줍니다. 프로세스가 제대로 작동하지 않으면 운영 체제가 정지 될 수 있습니다.

그러나 대부분의 CPU에는 인터럽트가 있습니다 . 인터럽트는 현재 프로세스 (선점)를 일시 중지하고 운영 체제로 다시 제어합니다. 특정 간격으로 발생하거나 외부에서 트리거되도록 인터럽트를 예약 할 수 있습니다 (예 : 재설정 버튼 누름).

기본적으로 CPU는 OS 실행과 프로세스 실행 사이에서 매우 빠른 속도로 전환됩니다. 또한 CPU에는 "사용자 모드"및 "커널 모드"가 있습니다. 프로세스는 사용자 모드에서 실행되고 OS는 커널 모드에서 실행됩니다. 사용자 모드에서 실행하면 프로세스가 제한된 명령 (예 : IO)을 실행하지 못합니다. 프로세스가 디스크에 쓰려면 OS에 요청해야합니다. OS는 커널 모드로 전환하고 프로세스를 대신하여 쓰기를 수행합니다 (프로세스에 필요한 권한이 있는지 확인한 후).


7
@Imray 실제로 CPU에는 OS가 또 다른 코드 일뿐입니다. 그러나 CPU에는 OS 작성자가 사용하도록 설계된 많은 기능이 있습니다.
Tom van der Zanden

3
"인식"이 올바른 용어인지는 모르겠지만 CPU를 운영하는 것 외에는 다른 이유가 없습니다. 완전히 독립적 인 것은 아닙니다. 실제로, CPU는 다양한 모드를 관리하고 그렇지 않으면 수행 할 작업을 알려주기 위해 OS에 전적으로 의존합니다.
모헤어

2
@Mohair OS없이 실행되는 마이크로 컨트롤러가 많이 있습니다. CPU로 간주합니까?
Tom van der Zanden

2
"그것들은 CPU로 간주됩니까?" 물론 그렇습니다. 첫 번째 컴퓨터에서 6502는 별개의 사용자 및 커널 링이 없었지만 poke명령 줄에서 모든 종류의 장난 을 일으킬 수 있습니다.
dmckee

2
@TomvanderZanden 정확히 어떻게 the CPU switches back and forth between running the OS and running processes합니까? 무엇이 스위치를 트리거합니까?
jnovacho

1

사용자 공간과 커널 공간 코드를 실행하기 위해 마이크로 프로세서에 두 개의 다른 프로세서가 필요하지 않습니다. 기본적으로이 방법은 BIOS를 부팅 할 때 부트 로더 (55aa 부트 로더 서명으로 끝나는 디스크의 512kb 코드)에서이 부트 로더를 램핑하고 컴퓨터를 종료 할 때까지 커널이 램에로드되어 영원히 실행될 때 이런 방식으로 작동합니다. 커널은 메모리를 관리하며 램에있는 커널 코드는 사용자 공간 코드로 덮어 쓰지 않습니다. 이를 위해 이러한 시스템 호출을 사용하여 사용자 공간 코드를 호출 한 시스템 호출이 있으며이를 수행하기 위해 사용자 공간 코드를 추가하고 실행을 시작하십시오. 운영 체제에서이 개념은 메모리 관리로 연구되었습니다. 읽을 수있는 링크는 다음과 같습니다. 시작하기에 매우 좋습니다. https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf


0

다른 답변을 바탕으로 커널 자체가 프로세스가 아니라 관리 코드라고 생각하면 이해하기가 더 쉽습니다. 모든 사용자 프로세스는 커널 공간의 일부를 사용하여 사용자 모드에서 커널 모드로 전환하고 커널 코드 (권한 명령)를 실행할 수 있습니다. 그런 다음 프로세스는 사용자 모드로 돌아가서 사용자 공간에서 다시 실행될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.