'Education'에 해당되는 글 58건

  1. 2009.10.22 Scheduling(1) by 초상큼발랄 1
  2. 2009.10.13 안드로이드 실행 by 초상큼발랄 1
  3. 2009.10.13 안드로이드 설치 by 초상큼발랄 2
  4. 2009.10.13 요일 프로그램 by 초상큼발랄 2
  5. 2009.10.12 Trace of Process by 초상큼발랄 2
  6. 2009.10.07 HAL(Hardware Abstraction Layer) by 초상큼발랄
  7. 2009.10.07 프로세스 by 초상큼발랄
  8. 2009.10.06 운영체제 by 초상큼발랄
  9. 2009.09.24 Samba 설치 by 초상큼발랄
  10. 2009.09.10 1. 운영체재 개요 by 초상큼발랄

Chapter 9. Uniprocessor Scheduling

* 스케줄링의 목적

- 처리기가 다음에 실행할 프로세스를 선택하는 것

- 응답시간(Response time)

- 처리량(Throughput)

- 효율성(Processor efficiency)

* 스케줄링의 종류

- 장기 스케줄링(Long-Term Scheduling)

· 프로세스를 시스템으로 집입시킬지 여부를 결정

· 다중프로그래밍의 정도를 제어하는 역할

- 중기 스케줄링(Medium-Term Scheduling)

- 단기 스케줄링(Short-Term Scheduling)

· 디스패처(Dispatcher)

· CPU에 의해 실행될 다음 번 프로세스로 어떤 프로세스를 선택할지를 결정

· 자주 실행됨

* 단기 스케줄링 평가 기준들

· 사용자 중심의 성능 관련 평가 척도

- 반환 시간(Turnaround Time): 프로세스가 시스템으로 진입한 후부터 종료할 때까지 걸린 시간

- 응답시간(Response Time): 프로세스가 시스템에 요구를 한 후 이에 대한 시스템으로부터의 첫 번째 응답이 올 때까지의 시간

- 완료 기한(Deadline): 프로세스가 완료 되어야 하는 시점

· 사용자 중심의 기타 평가 척도

- 예측가능성(Predictability): 같은 작업이라면 실행 될 때마다 동일한 기간 동안 실행되어야 하고, 시스템의 부하 정도에 상관없이 동일한 비용으로 실행되어야 한다. 만일 실행할 때 마다 지나치게 차이가 난다면, 사용자들은 시스템을 신뢰하지 못하게 될 것이다.

· 시스템 중심의 성능 관련 평가 척도

- 처리량(Throughput): 단위시간 내에 실행을 완료 시킬 수 있는 프로세스의 수

- 처리 이용률(Processor utilization): 전체 시간 중에 처리기가 바쁘게 실행을 한 시간의 비율

· 시스템 중심의 기타 평가 척도

- 공정성(Fairness):

- 우선순위 부여(Enforcing Priority):

- 균형있는 자원 활용(Balancing Resources):

* 우선순위(Priorities)

- 스케줄러는 항상 높은 우선순위의 프로세스를 선택

- 문제점: 순수 우선순위 기반 스케줄링 방식에서 높은 우선순위의 프로세스가 계속적으로 생성되고 낮은 우선순위의 프로세스가 계속 CPU를 할당 받지 못해 기아(Starvation) 발생

* 결정 모드

- 비선점(Non-preemptive)

· 프로세스가 일단 실행 상태(Running State)에 진입하면 종료되거나 자발적으로 CPU를 놓을 때까지는 CPU를 빼앗기지 않는다.

- 선점(Preemptive)

· 현재 실행 중인 프로세스라고 할지라도 운영체제에 의해 인터럽트가 걸려 비자발적으로 준비 큐로 이동된다.

· CPU를 빼앗을 수 있다.

'Education > Operating System' 카테고리의 다른 글

Interrupt  (2) 2009.10.22
Scheduling  (0) 2009.10.22
Trace of Process  (2) 2009.10.12
HAL(Hardware Abstraction Layer)  (0) 2009.10.07
프로세스  (0) 2009.10.07
Posted by 초상큼발랄
l

Hello World 만들기

1. 이클립스 메뉴의 File -> New -> Project 를 선택
Select a wiard 가 나타나는데 목록을 보면 우리의 관심인 Android가 보임

2. 앞에 + 를 클릭 펼쳐진 Android Project 클릭. Next 버튼 클릭

3. New Android Project 다이알로그가 나타난다. 먼저 Project name 을 설정 

4. Contents 그룹에서 새로운 프로젝트 이므로 Create new project in workspace 선택

5. Build Target 그룹에서 Android 1.5 선택

6. 
           Application name: Hello,Android
           Package name: org.example.hello

           Create Activity: Hello

           Min SDK Version: 자동 선택


7. Finish 버튼 클릭

'Education > Android' 카테고리의 다른 글

Android 환경 설정  (1) 2010.07.20
Android Amulator 설치  (4) 2010.06.22
Android Error - The project cannot be built until build path errors are resolved  (0) 2010.06.22
JDK 설정  (0) 2010.06.21
안드로이드 설치  (2) 2009.10.13
Posted by 초상큼발랄
l

- Android SDK 1.5(http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.5_r2.zip)

1. Windows SDK를 다운로드 받아서 사용

2. 압축 푼 후에 tools 폴더에서 emulator 경로 찾기

2-1. C:Android\android-sdk-windows-1.5_r3tools 폴더내부에 보면 emulator.exe라는 실행파일이 존재하는데 Android 1.1 SDK 버전에서는 emulator.exe파일을 실행하면 emulator가 바로 실행되었으나 업데이트된 1.5버전에서는 AVD(Android Virture Device)란 것이 생기면서 1.1버전과 1.5버전을 AVD를 통해 동작 하도록 되어있다.

2-2. 제어판의 시스템에서 고급 탭의 환경변수에 사용자 변수 편집 emulator의 경로를 추가 
      Dos 창을 실행 시킨 후에 C:\Users\oslab\Desktop\Android\android-sdk-windows-1.5_r3\tools 폴더로 이동하여 다음과 같이 입력


- eclipse-java-ganymede-SR2-win32(http://www.eclipse.org/downloads/)

1. eclipse 실행

2. workspace의 경로 설정

3. Help - Software Update... 선택

4. Software Updates.... 탭 이동

5. Add Site 선택

6. ( https://dl-ssl.google.com/android/eclipse/ ) 주소 입력 ( 문제 발생시 https ==> http 로 변경, 보안문제 )

7. 박스 체크 후 install 시작 (중간에 라이센스 동의 나오면 동의하기 ^^)

8. 재부팅

9. SDK폴더 지정하기

9-1. window - preferences - Android 선택

9-2. Browse 선택 이후 Android SDK 가 설치된 폴더를 선택

9-3. Apply - OK 선택

10. 안드로이드 AVD 생성

10-1. Eclipse의 메뉴에서 Window -> Android AVD manager를 실행

10-2. Apply를 눌러 적용한 다음 Eclipse 재실행 

 

'Education > Android' 카테고리의 다른 글

Android 환경 설정  (1) 2010.07.20
Android Amulator 설치  (4) 2010.06.22
Android Error - The project cannot be built until build path errors are resolved  (0) 2010.06.22
JDK 설정  (0) 2010.06.21
안드로이드 실행  (1) 2009.10.13
Posted by 초상큼발랄
l

동생 숙제를 하다가,,,,,,

#include <stdio.h>
#include <stdlib.h>

void main() // int main(int arcg, char **argv)
{

 int year = 0, month = 0, day = 0;
    int total = 0, day_count = 0;

 int i;

 printf("Enter the Year: ");
 scanf("%d", &year);
 printf("Enter the Month: ");
 scanf("%d", &month);
 printf("Enter the Day: ");
    scanf("%d", &day);

 for(i = 1; i < month; i++)
 { 

if(i == 2)
{

if((year%4 == 0 && year%100 != 0) || year%400 == 0) day_count = 29; 
   
else day_count = 28;

}

else if(i==4 || i==6 || i==9 || i==11) day_count = 30; 
  
else day_count = 31; 
 

total += day_count; 

 }

 total = ( (year-1) * 365 + (year-1) / 4 - (year-1) / 100 + (year-1) / 400 + total + day) % 7;

 switch(total)
 {

      case 0: printf("%d Years %d Months %d Days is Sunday\n", year, month, day); break;
      case 1: printf("%d Years %d Months %d Days is Monday\n", year, month, day); break;
      case 2: printf("%d Years %d Months %d Days is Tuesday\n", year, month, day); break;
      case 3: printf("%d Years %d Months %d Days is Wednesday\n", year, month, day); break;
      case 4: printf("%d Years %d Months %d Days is Thursday\n", year, month, day); break;
      case 5: printf("%d Years %d Months %d Days is Friday\n", year, month, day); break;
      case 6: printf("%d Years %d Months %d Days is Saturday\n", year, month, day); break;

}

}

'Education > ETC_work' 카테고리의 다른 글

PPT,EXCEL 창 여러개 띄우기  (0) 2012.02.07
Posted by 초상큼발랄
l
프로세스의 Trace를 위한 추적 Utility

* ltrace(Library trace)
- strace보다 한단계 추상 수준을 높인 도구로 library call을 보여줌
- Dynamic libary link에 대해서만 추적이 가능
-> object file 내부에서 이뤄지는 자체적인 호출은 추적 불가능
[root@localhost Example]# vi hello.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 main()
  5 {
  6     FILE* fp;
  7
  8     printf("Hello World!\n");
  9
 10     fp =fopen("hello.c", "rw");
 11
 12     fclose(fp);
 13     exit(0);
 14 }


[root@localhost Example]# ltrace ./hello

__libc_start_main(0x8048464, 1, 0xbfb07104, 0x80484c0, 0x80484b0 <unfinished ...>
puts("Hello World!"Hello World!)                                              = 13
fopen("hello.c", "rw")                                                             = 0x812b008
fclose(0x812b008)                                                                  = 0
exit(0 <unfinished ...>
+++ exited (status 0) +++




[root@localhost Example]# vi hello1.c
  1 #include <stdio.h>
  2
  3 main()
  4 {
  5     printf("Hello World!\n");
  6
  7 }

[root@localhost Example]# ltrace ./hello1

__libc_start_main(0x80483b4, 1, 0xbfdb8bb4, 0x80483e0, 0x80483d0 <unfinished ...>
puts("Hello World!"Hello World!)                                          = 13
+++ exited (status 13) +++
*strace(System Call trace)

- 프로그램이 커널과 상호작용하는 모든 system call 내역을 보여줌
- 프로그램 규모가 커지면 strace 결과가 많아지므로 filtering해서 해석하는 방법 숙지
- system call을 많이 사용하지 않고 알고리즘 위주로 작성한 프로그램의 경우에는 strace로 추적해도 소용없음
- system call interface를 이용해 system call을 추적
- kernel에서 제공하는 system call은 개념상으로 일반적인 function call과 유사하지만 system call를 한 시점에서
kernel mode로 전환해서 실제 system call routine을 실행한다는 중요한 차이점



[root@localhost Example]# vi hello.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 main()
  5 {
  6     FILE* fp;
  7
  8     printf("Hello World!\n");
  9
 10     fp =fopen("hello.c", "rw");
 11
 12     fclose(fp);
 13     exit(0);
 14 }

[root@localhost Example]# gcc -o hello hello.c
[root@localhost Example]# strace ./hello

 <결과 화면>
execve("./hello", ["./hello"], [/* 34 vars */]) = 0
brk(0)                                  = 0x811e000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=137077, ...}) = 0
mmap2(NULL, 137077, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb8073000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\2531\0004\0\0\0\304"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1803388, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb8072000
mmap2(0x304000, 1513768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x304000
mprotect(0x46f000, 4096, PROT_NONE)     = 0
mmap2(0x470000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16b) = 0x470000
mmap2(0x473000, 10536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x473000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb8071000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb80716c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x470000, 8192, PROT_READ)     = 0
mprotect(0x300000, 4096, PROT_READ)     = 0
munmap(0xb8073000, 137077)              = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb8094000
write(1, "Hello World!\n"..., 13Hello World!)       = 13
brk(0)                                  = 0x811e000
brk(0x813f000)                          = 0x813f000
open("hello.c", O_RDONLY)               = 3
close(3)                                = 0
exit_group(0)                           = ?



[root@localhost Example]# vi hello1.c
  1 #include <stdio.h>
  2
  3 main()
  4 {
  5     printf("Hello World!\n");
  6
  7 }

[root@localhost Example]# gcc -o hello1 hello1.c
[root@localhost Example]# strace ./hello1


 <결과 화면>
execve("./hello1", ["./hello1"], [/* 34 vars */]) = 0
brk(0)                                  = 0x98cc000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=137077, ...}) = 0
mmap2(NULL, 137077, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f0e000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\2531\0004\0\0\0\304"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1803388, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0d000
mmap2(0x304000, 1513768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x304000
mprotect(0x46f000, 4096, PROT_NONE)     = 0
mmap2(0x470000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16b) = 0x470000
mmap2(0x473000, 10536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x473000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0c000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f0c6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x470000, 8192, PROT_READ)     = 0
mprotect(0x300000, 4096, PROT_READ)     = 0
munmap(0xb7f0e000, 137077)              = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2f000
write(1, "Hello World!\n"..., 13Hello World!)       = 13
exit_group(13)                          = ?


 

'Education > Operating System' 카테고리의 다른 글

Scheduling  (0) 2009.10.22
Scheduling(1)  (1) 2009.10.22
HAL(Hardware Abstraction Layer)  (0) 2009.10.07
프로세스  (0) 2009.10.07
운영체제  (0) 2009.10.06
Posted by 초상큼발랄
l

- 운영체제를 구성하는 한 부분으로 API처럼 사용
  (엄밀히 기술적인 면에서 분류를 하면 HAL은 device level에 있기때문에 API level보다는 하위구조)
- 컴퓨터의 물리적인 하드웨어와 컴퓨터에서 실행되는 소프트웨어 사이의 추상화 계층
- 추상적인 계층에서 하드웨어 서비스와 상호작용할 수 있게 해주는 프로그램 계층
- 운영체제의 커널이나 장치 드라이버로부터 호출
- OS 이식성 향상의 목적
  다른 아키텍처의 하드웨어마다에 HAL을 교환하는 것만으로 커널의 프로그램 코드 전부를 변경하지 않고도 OS를 이식가능

'Education > Operating System' 카테고리의 다른 글

Scheduling(1)  (1) 2009.10.22
Trace of Process  (2) 2009.10.12
프로세스  (0) 2009.10.07
운영체제  (0) 2009.10.06
1. 운영체재 개요  (0) 2009.09.10
Posted by 초상큼발랄
l

* Process( 프로세스) 정의
- 수행 중인 프로그램
- 컴퓨터 상에 수행 중인 프로그램의 인스턴스
- 처리기에 할당되어 수행 될수 있는 개체(Entity)
- 명령들의 순차수행, 현재 상태, 연계된 시스템 자원들의 집합등에 의해 특징지어지는 활동 단위( a unit of activity) 

cf) Process : 사용자 관점(동적 변화 상태)
     Task : CPU관점(작업 단위)


* 운영체제의 요구사항
- 적절한 응답시간을 제공하면서 처리기 이용률을 극대화 할 수 있도록 여러 프로세스 수행을 인터리빙한다.
인터리빙(interleaving): 복수 모듈이 효과적으로 작동되기 위해서는 메모리 모듈을 번갈아 가면서 접근하는 방법
인터리빙 기법에서는 메모리 모듈을 Bank라고 하며, 짝수와 홀수 Bank로 나누어 번갈아 검색
- 교착상태를 회피함과 동시에 특정정책에 부합하도록 자원을 프로세스에 할당한다.
IPC(Inerprocess Communication) 프로세스 간 통신과 사용자의 프로세스 생성을 지원하는데 도움,
공유 파일을 이용한 통신
파이프(특수 File을 이용한 Data 교환)
- Named Pipe
- Unnamed Pipe
˙ 세마포어(Semaphore)
- Countable Semaphore: 세마포어 값이 2이상인 경우
- Binary Semaphore: 세마포어 값이 0, 1인 경우
˙ 공유 메모리(Shared Memory)
˙ 메세지 큐(Message Queue)

* Process의 구성요소
- 식별자(Identifier): 각 프로세스를 구별해 주는 유일한 식별자
- 상태(State): 여러 프로세스 수행가능 상태에서 다른 프로세스는 중단된 상태일 경우를 대비해서 상태 정보 확인
- 우선 순위(Priority): 상대적인 우선순위, 긴급처리 요청시 처리 요구를 위함
- 프로그램 카운터(Program Counter): 다음에 수행될 명령어의 주소
- 메모리 포인터(Memory Pointer): 공유되는 프로세스의 메모리 블록들에 대한 포인터 포함 (가상M주소 + 물리M주소)
- 문맥 데이터(Context Data): 프로세스가 수행중일때, 처리기의 레지스터에 존재하는 데이터
- 입출력 정보(I/O Information): 미해결 입출력 요청, 프로세스에 할당된 입출력 장치, 프로세스에 사용중인 파일들의
리스트 등을 포함
- 어카운팅 정보(Accounting Information)

* PCB(Process Control Block): Process의 구성 요소를 포함하고 있는 자료구조
- 역할
˙ 프로세스 구성 요소들을 포함
˙ 운영체제로 하여금 다수의 프로세스를 지원하고 다중처리를 제송할 수 있게 해주는 주요 도구

< /include/linux/sched.h >
task_struct {
}


cf) Dispatch(디스패치): 처리기를 한 프로세스부터 다른 프로세스로 교체(

* Process 상태 전이


Running(수행): 현재 수행 중인 프로세스
Ready(준비): 수행될 준비가 되어있는 프로세스
Blocked/Waiting(블록/대기): 입출력 연산 완료 등과 같은 어떤 이벤트가 발생할 때까지 수행될 수 없는 프로세스 
New(생성):
방금 생성되었지만, 프로세스 풀(pool)로의 진입이 아직 허용되지 않은 프로세스,
새로운 프로세스는 자신의 프로세스 제어블록이 생성되었다고 할지라도 그 당시까지 주기억장치에 적재되지 않는다
Exit(종료): 프로세스 수행이 중지되거나 어떤 이유로 중단된 프로세스,
운영체제에 의해 수행가능 프로세스 풀에서 방출된 프로세스


'Education > Operating System' 카테고리의 다른 글

Trace of Process  (2) 2009.10.12
HAL(Hardware Abstraction Layer)  (0) 2009.10.07
운영체제  (0) 2009.10.06
1. 운영체재 개요  (0) 2009.09.10
운영체제 개요  (0) 2009.09.04
Posted by 초상큼발랄
l

운영체제

2009. 10. 6. 18:33 by 초상큼발랄

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Fedora 11

설치 확인

1. # rpm -qa | grep samba

설치

1. # yum install samba

2. # cd /etc/samba

2-1. # cp smb.conf smb.conf_bacup

2-2. # rm -rf smb.conf

2-3. # vi smb.conf


 
Samba Server 세팅 

1.  # adduser samba

2. # passwd samba

3. # smbpasswd -a samba

4. # /etc/init.d/smb restart

5. # mkdir /home/samba

6. # chmod 755 /home/samba

7. # chown samba.samba /home/samba
password: samba

8. # /etc/samba/smb.conf

[global]
 workgroup = WORKGROUP
 server string = Samba Server
 printcap name = /stc/printcap
 load printers = yes
 printing = lprng
 guest account = nobody
 log file = /var/log/samba/%m.log
 max log size = 0
 security = user
 encrypt password file = /etc/samba/smbpasswd
 username map = /etc/samba/smbusers
 include = /etc/samba/smb.conf.%m
 socket options = TCP_NODELAY SO_RCVBUF=8192SO_SNDBUF=8192

[home]
 comment = MySamba
 path = /home/samba
 browseable = yes
 read only = no
 writable = yes
 public = no
 create mask = 0750
 
9. #service smb restart

'Education > Linux Kernel' 카테고리의 다른 글

커널 소스 트리  (0) 2009.11.18
root passwd  (0) 2009.10.28
명령어  (0) 2009.10.28
Fedora11 ( linux-2.6.29.4 ) Compile 과정  (0) 2009.09.07
root 계정  (0) 2009.09.07
Posted by 초상큼발랄
l

1.1 기본 구성
1) 처리기(processor) : 컴퓨터 동작을 제어, 데이터를 처리
처리기가 하나만 있을 경우 중앙처리장치(CPU)라고 부름
메모리와 데이터를 교환

- MAR(Memory Address Register) : 다음에 읽거나 기록할 메모리 내 주소를 명시
- MBR(Memory Buffer Register) : 메모리에 기록되거나 메모리로 부터 읽힐 데이터를 저장
- I/O Address Register
- I/O Buffer Register : 입출력 모듈과 처리기 간의 데이터 교환을 위해 사용

- 메모리 모듈 (Memory Module) : 일련 번호로 주소가 부여된 장소 공간
-> 이진수로 저장 : 명령어 또는 데이터로 해석
- 입출력 모듈 (I/O Module) : 외부 장치로부터 처리기와 메모리로 데이터를 전송
또는 역방향으로 데이터 전송
-> 데이터가 전달 될 때 까지 일시적으로 데이터를 보관하기 위한 내부 버퍼를 가짐
2) 주기억장치 (main memory) : 데이터와 프로그램을 저장
(1) 휘발성 (Volatile) : 컴퓨터가 shutdown 될 경우 메모리의 내용이 사라짐 <ㅡ> 디스크 내용은 유지
(2) 실기억장치(Real memory) 또는 주메모리 (Primary memory)라고 부름
3) 입출력 모드 (I/O module) : 컴퓨터와 외부 환경간의 데이터 이동 담당
(1) 보조기억장치(Secondary memory device)
(2) 통신 장비(Communications equipment)
(3) 단말기(Terminal)
4) 시스템 버스 (system bus) : 처리기, 주기억장치 그리고 I/O 모듈간의 통신 제공

1.2 처리기 레지스터
1) 사용자가 볼 수 있는 레지스터 (User-Visible Registers)
- 레지스터 사용의 최적화를 통해 기계어 또는 어셈블리어 프로그래머에게 주기억장치의 참조를 최소화 할 수 있게 함.
- 처리기가 수행하는 기계어를 통해 참조
- 레지스터의 유형
@ Data (데이터)
@ Address (주소) : 데이터나 명령어의 주기억장치 주소를 저장

 

2) 제어 및 상태 레지스터 (Control and Status Registers)
- PC(Program Counter) : 다음에 수행할 명령어의 주소를 저장
- IR(Instruction Register) : 현재 수행 중인 명령어를 저장
- PSW( Program Status Word) : 상태 정보를 저장하기 위한 레지스터 집합을 포함하도록 모든 처리기는 설계됨

조건코드(Condition codes) 
Flag 라고 불림
Bits set의 단위로 연산의 결과로서 처리기 하드웨어에 의해 설정
ex) 양수, 음수 또는 0, 오버플로우 결과를 만듬
명령어 수행 결과에 대한 피드백의 목적으로 사용

인터럽트(Interrupt enable/ disable)
여러 개의 인터럽트 레지스터를 제공하여, 각각이 인터럽트 처리 루틴에 대한 포인터 역할

Supervisor / User mode



Fetch stage : Instruction을 메모리로 불러들이는 과정, 명령어를 가져오는 과정 의미


1.3 명령어 수행
1) 명령어 처리 두 단계
(1) 메모리로 부터 한 번에 하나의 명령어를 읽어들임(fetch)
(2) 읽어 들인 명령어 수행


'Education > Operating System' 카테고리의 다른 글

Trace of Process  (2) 2009.10.12
HAL(Hardware Abstraction Layer)  (0) 2009.10.07
프로세스  (0) 2009.10.07
운영체제  (0) 2009.10.06
운영체제 개요  (0) 2009.09.04
Posted by 초상큼발랄
l