운영체제[프로세스관리]

고동현·2024년 3월 28일
0

운영체제

목록 보기
5/16


file system에서 실행파일을 누른다던지 실행파일을 실행시키면 메모리에 올라가면서 실행된다.
그런데 사실 전부 다 메모리에 올라가는것은 아니고, virtual 메모리에 자기 자신만의 address가 만들어진다.
그다음에, 당장 필요한 부분은 physical memory에 올라가고, 나머지 부분은 swap영역으로 간다.

그래서 가상 메모리는 각 프로세스만의 0번지부터 쭉 사용하게 되는것이고, 물리적 메모리에는 0번지 부터 쭉 하나의 주소로 매겨져서 이걸 각 프로세스와 커널이 같이 사용하는 형태가 된다.

고로, 가상메모리 주소와 물리 메모리 주소가 다르기 때문에 주소 변환이라는 것이 필요하다.

그리고 그림과 같이 address space에는 code data stack이 있다.

  • code
    code에는 실제 실행 파일의 코드가 들어있는데, cpu에서 수행해야할 기계어들이 들어있다.
    main,사용자 정의함수 이런게 컴파일할때 기계어로 변하게 되는데, 이 기계어가 code 영역에 위치하게 된다.

  • data
    data에는 프로그램이 실행되다가 memory data를 쓸때가 있다. 변수, 배열등등을 이용할 때 말이다. 이때 지역변수는 stack에 data에는 전역변수가 위치하게 된다.

  • stack
    stack에는 함수 호출과 return에 관한 정보를 넣어둔다.

커널도 당연히 code data stack이 존재한다.

운영체제 또한 함수를 호출하고 전역변수를 쓴다.

code 영역
운영체제의 목적이 무엇인가? 자원을 잘 관리하기 위함이다.
당연히 자원을 잘 관리하기 위한 로직이 code영역에 들어있고, 또한 운영체제가 언제 호출된다했는가? 사용자 프로그램이 cpu를 쓰다가 인터럽트가 들어오면(나 디스크 다읽었어~) 호출되는데
이때 인터럽트를 어떻게 처리할지 뭐 이런 code도 다 code영역에 들어있다.

또는 사용자 프로그램이 사용 할 수 없는 명령 ex) IO같은 특권명령 들을 수행하기 위해서 사용자 프로그램이 운영체제한테 부탁해야하는데 이때 syscall 할때 어떻게 처리할지 이런것들이 다 code영역에 들어있게 된다.

data 영역
운영체제는 모든 하드웨어를 관리하기 위한 자료구조를 가지고 있다.
또한 현재 실행중인 모든 프로세스를 관리하기 위한 자료구조인 PCB가 있다.(뒤에서 PCB설명)

stack 영역
stack에는 각 프로세스의 커널 스텍이 있다.
이게 무슨말이냐하면,프로그램 A가 실행되다가
=> 운영체제한테 요청을했다. IO 부탁쓰
=>그러면 당연히 운영체제로 넘어오면서 운영체제의 code가 실행될꺼다 뭐 시스템 콜을 어떻게 처리 할 껀지 이런코드
=> 근데 운영체제 또한 함수 구조로 되어있다.
=> 그래서 어떤 함수가 다른 함수를 호출을 하면 stack을 써야만 한다.
=>그래서 만약 프로그래 A때문에 운영체제가 호출이 된거면, 커널스택은 A의 커널스택을 사용, 만약 B를 실행하다가 운영체제가 호출되면 B의 커널 스택을 사용하는 것이다.

어쨋든, 결국 커널의 stack이기 때문에, 여기에 저장되는 내용은 code영역에서
함수호출해서 어디로 돌아갈지 이런걸 저장하는것이다.
다만 누구때문에 호출됬냐에 따라 각 프로세스의 커널 스택을 사용하는것이다.


프로그램을 실행시키면 프로세스가 되어서 실행이 된다.
그러다가 프로그램이 다 돌아가면, 이제 자신의 임무를 마치고 종료하게 된다.
그래서 이러한 일련의 과정을 보면, 내가 정의한 함수나, 또는 Library함수를 사용
할때는 usermode로 프로그램 A의 주소공간에서 실행하게 된다.

그러나 disk나 IO를 하기위해서 syscall을 갈기면 kernelmode로 커널의 주소공간으로 이동하게 되고, IO작업을 처리하고 return하고 다시 cpu를 프로그램 A에게 준다.

여기서 유저모드와 커널모드가 헷갈린다면,
이전에 설명을 했는데 cpu에는 modebit이 달려있다.
modebit이 0이면 그걸 커널모드라 하고, 그떄는 운영체제가 cpu를 쓰기 때문에 모든 명령을 수행가능하다.
cpu가 다시 사용자 프로그램에게 넘길때는 1로 설정하여 넘겨서 제한된 기계어만 수행가능하게 한다.

profile
항상 Why?[왜썻는지] What?[이를 통해 무엇을 얻었는지 생각하겠습니다.]

0개의 댓글