text:
You are assuming, apparently, that Christians read the Bible. Not so much. If they did, there would be many fewer of them around. Your quote is taken from the Pentateuch, which, I assure you, most Christians avoid quoting, lest they sound like raving lunatics.
Of course Deuteronomy is the Torah of the Hebrew Scriptures. You'd be best addressing that question to Orthodox Jews, not Christians.
Now, for homework, go and research what the general treatment of rape was in the nomadic tribes of the time in that part of the world. Then consider whether Deuteronomy was an improvement.
Humanity has learned about ethics and about God slowly, in gradual steps. The Bible is in part a history of that developing understanding.
It makes little sense to point out how Pythagoras was wrong on points. Of course he was! What's remarkable is that Pythagoras made advances over others at the time, and some of those advances and especially that way of thinking is worth learning from and remembering. Humanity has learned math and science in gradual steps, too.
current price of silver in us 23.70 an ounce X 50 = 1185.
ah Professor Robert. You escaped the other thread without answering my question. SO I will hijack this thread and ask you again.
Based on the vast molestation coverup perpetrated by the Catholic church and the Vatican, do you feel it should be dismantled?
Of course Deuteronomy is the Torah of the Hebrew Scriptures. You'd be best addressing that question to Orthodox Jews, not Christians.
I'm afraid not, Robert. Jesus himself stated unambiguously that until heaven and earth are snuffed out and all things come to fruition the Hebrew Scriptures do not change one bit.
"For most certainly, I tell you, until heaven and earth pass away, not even one smallest letter or one tiny pen stroke shall in any way pass away from the law, until all things are accomplished." - Jesus in Mathew 5:18
But of course the Bible never means what it says. The Bible always says what YOU mean. That may have something to do with why there are 41,000 denominations of Christianity in the world today.
Meant to post this link.....Do watch the video.
Seems like "Professor" (?) Roberts picks and chooses his morals from the Bible. Well why don't you take your own advice Rob –
"Of course Deuteronomy is the Torah of the Hebrew Script. You'd best address that question to Orthodox Jews, not Christians"
Well it seems what you're saying is –the Torah isn't relevant. If the Torah's not relevant then:
– Genesis isn't relevant. If Genesis isn't relevant – then original sin isn't relevant. If original sin isn't relevant, then Jesus isn't relevant. If Jesus isn't relevant, then Catholicism isn't relevant. If Catholicism isn't relevant, then you're wasting your time and life!
You only live once. This is not a dress rehearsal for a big after party. Once you past on, you will no longer exist. Stop wasting your time defending folklore and bronze-age myths. Live your life.
"Humanity has learned about ethics and about God slowly, in gradual steps." - Professor Bob
Perhaps our understanding would be greatly improved if these supernatural beings would make an appearance every few hundred years or so. Verifiable evidence is a wonderful thing for those seeking understanding.
don't you know that religious love to pick and choose bits of the bible?


text:
ask me about milage; original 6cyl. motor ; runs well; more pictures on request.... More
CHEVROLET: 1952 Deluxe hardtop, $4,700, negotiable. 315-253-4961; [email]; see online at: www.hmn.com/1740778... More
Chevy 1949 Deluxe cab pickup, for restoration or street rod project, excellent sheetmetal, extra parts available, truck has title, $2,200; other projects available, call... More

subset: commoncrawl


text:
1963 Ford Falcon Futura 2 Door ConvertibleBrand new pearl white paint jobAll new floor pansAll Matching numbersNew custom coverNew hub capsNew seat coversOriginal motor... More
Ford Mustang 1965 Coupe V8 A-code for restoration 1965 Ford Mustang Coupe to be restored. The body of this car needs some work but the... More
This 1969 Ford Mustang Fastback Project Car Coupe features a NO cyl Gasoline engine. The vehicle is Gray with a O Vinyl interior. It... More
CALL US FOR A DETAILED DESCRIPTION OF THE CAR! WE DO A 150+ POINT CHECK ON EACH VEHICLE AND ARE HAPPY TO SHARE... More
1966 Ford Mustang Coupe If you are interested in this vehicle or have any questions, please call Darrel at 360-609-5639 Black, Great condition, Straight 6, Luggage rack, Rally pack, Has orginal hub... More
1962 Ford Falcon Ranchero If you are interested in this vehicle or have any questions, please call Gerald at 541-571-1033 170 six cylinder and 3 speed standard... More
Offered for Sale by the California Automobile Museum Nice 1963 Ford F100 "Unibody" Pickup Truck We Offer Financing Ford built its fourth generation F100 from 1961 to... More
1968 Ford F100 PickupClassic cars have heritage and history and a completely unique style thatSets them apart from all the other cars on the... More
~CALL US FOR A DETAILED DESCRIPTION OF THE CAR! WE DO A 150+ POINT CHECK ON EACH VEHICLE AND ARE HAPPY TO SHARE... More
1965 Falcon wagon Power rear window Factory 289 V-8 engine, automatic transmission, runs good. Good solid body, paint and interior. 4 new tires... More
6 cyl. 3 speed manual. runs good! Older red paint with very nice black interior... More
Ford 1968 Torino GT, 302 auto, nice dry barn find, California car, runs and drives well, nice interior, nice frame, floors, trunk, numbers matching real... More
FOR MORE INFORMATION ON THIS VEHICLE PLEASE CONTACT CRAIG ON 909 730 1555 MIKE ON 909 644 6220 OR MARCO ON 909 286 8000... More
1965 FORD GALAXIE 500 XL FASTBACK This is a true muscle car from the great era of power , performance,style and true American made.This classic... More
65 Mustang Coupe 289 Automatic Poppy Red with Black interior. We bought this to do a partial or full restoration. Have a couple to... More


text:
Obituaries, August 14, 2014
Helen Mieczkowski Cecil
DURHAM — Helen M. Cecil was called home by the Lord on August 8th, 2014. Helen was born on May 31st, 1921 in Johnson City, New York, the 7th of 9 children born to Joseph and Marianne Mieczkowski. She attended schools from elementary to sr. high school in Johnson City. Following graduation, she worked at the E.J. Shoe Factory prior to joining the Woman's Air Corp (WAC) during WWII as a Clerk/Typist obtaining the rank of Corporal.
Helen was stationed at a variety of duty stations stateside on the east coast throughout WWII and was then later transferred to duty stations in Europe, particularly Germany traveling to Berlin and other German cities. Helen was very active in sports participating in basketball, softball, ice and speed skating, tennis, bowling and golf, and competed in competition in skating while in Europe.
Following her military service, Helen returned to Johnson City to attend school and received an Associate Degree in Medical Technology from Broome Technical Community College. While attending B.C.C she met her future husband, Donald J. Cecil, and they were married in 1952. They have three children, Suzanne, David, and Douglas. While living in Rochester Minnesota, she was employed by the Rochester Mayo Clinic as a Lab Tech. Upon moving to Durham, NC, she began a long career at UNC Memorial Hospital in Chapel Hill, NC, rooting hard for the Tar Heels. After she officially retired, her support for the Heels never wavered and she was an avid Atlanta Braves fan and bingo player and loved her poodles.
Retirement gave her the perfect reason to continue her life passion of camping out at the beach, looking for shells and sharks teeth. Helen was also a member of the Henry Seemand WFW Post 2740 in Durham, NC.
Helen was preceded in death by her husband, Donald, in 1998, and by her sisters, Stephanie, Wanda, Virginia, Mary, Anna, Connie, Josephine, and her brother, PFC Stephen Mieczkowski, USMC during WWII.
Helen will be greatly missed. She his survived by daughter Suzanne Cecil of Durham, David, Sandra Cecil and grandchildren Stacy and David D. of NC, and Douglas, Carol Cecil and grandchildren Seth and Sophie of GA.
There will be a graveside service held at the U.S. National Cemetery, located on the grounds of the W.G. "Bill" Hefner VA Medical Center in Salisbury, NC, on Friday, August 15, at 1:00 PM.
Powles Funeral Home of Rockwell, honored provider of Veterans Funeral Care, is assisting the Cecil family. Online condolences may be made at www.powlesfuneralhome.com.
Michael John Green
DURHAM — Mr. Michael John Green, 55, died Tuesday at Duke University Hospital.
Mr. Green is survived by his wife, Miriam Green.
A funeral service will be held Friday, 2:00 p.m., at Clements Funeral Chapel in Durham. The family will receive friends from 12:00 to 1:45 p.m. at Clements Funeral Home prior to the service and in the Gathering Room at Clements following the service.
The family is being assisted by Clements Funeral Service, Inc., in Durham, N.C. Online condolences may be made at www.clementsfuneralservice.com.
William "Bill" Michael Greuling
DURHAM — William "Bill" Michael Greuling, of Durham, NC, passed away on Friday, August 8, 2014. He was raised in Durham and spent time in the Peace Corps followed by the US Army Corps of Engineers. Following his time in the Army, he returned to Durham for the duration of his life.
He is survived by his wife, Rebecca Greuling; daughter, Steffani Ann Pettie; sons, William Jeb and Robert L. Greuling; two grandchildren, Calvin and Elizabeth Pettie; sister, Ruth Ann Greuling; and step-sister Katherine Bradley Johnson.
A private family service will be held in his honor. Flowers are acceptable and may be delivered to Clements Funeral Service in Durham, NC.
The family is being assisted by Clements Funeral Service, Inc., in Durham, N.C. Online condolences may be made at www.clementsfuneralservice.com.
Clifton "Bart" Whicker, Sr.
DURHAM — Mr. Clifton "Bart" Whicker, Sr., 73, of 237 Waterfront Lane, died on Monday, August 11, 2014.
Mr. Whicker was born in Philadelphia and had lived most of his life in Durham. He was the son of the late James Clyde Whicker and Katherine Rogers Whicker. He was a veteran of the U.S. Army serving in the 82nd Airborne and 325th Infantry. Also during his service he was a U.S. Paratrooper, Swift Strike II & III attached to the 101st Screaming Eagles, Brigade Educational NCO, Recon (Pathfinder). He was in the Dominican Republic (San Domingo) from April 1965 to October 1965 and had top-secret clearance (CODE). He was in the Lyndon B. Johnson Inaugural parade. He retired as President of Eagle Water Systems of the Triangle. He was a member of Ridgecrest Baptist Church. He loved hunting and boating. He was preceded in death by his sisters, Charlotte Goke and Nancy Priester.
He is survived by his wife of 52 years, Sondra Pierce Whicker; son, Clifton Bart Whicker, Jr. and wife, Tina of Hillsborough; daughter, Kimberly Grinstead and husband, Bryan of Rougemont; brother, James Clyde Whicker; 5 grandchildren, Katie, Kelsey and Kourtney Whicker, Taylor and Tyler Grinstead; and his loving pet, Tiffany.
Funeral services will be held on Friday at 11 a.m. at Hudson Funeral Chapel. Rev. Ernest Ferrell will officiate. Burial with military rites will be held in the Oak Grove Memorial Gardens. Honorary pallbearers will be Ronnie Bell, Bill Abernathy, Ken Cook, Bill Maness, Buzz Griggs and Don Miller.
The family will receive friends on Thursday from 6 to 8 p.m. at Hudson Funeral Home and other times at the home, 11 Burgess Court, in Hillsborough.
In lieu of flowers, donations can be made to the DAV at www.dav.org. Online condolences can be made to www.hudsonfuneralhome.com.
Donald Carlton Fuller
September 10, 1948 — August 11, 2014
MORRISVILLE — Donald who most people knew as "Duck" or "Don" died Monday, Aug. 11, at the Hock Family Pavilion after a timely battle with melanoma. He was preceded in death by his parents, W.C. Fuller & Thelma Fuller, and by his son, Kenneth Fuller. He is survived by his daughter, Gina Mabe (Jesse); his son, Kevin Fuller; his brothers, Buddy Fuller (Mary) and Ray Fuller; his grandchildren, Timothy, Chris and Hannah. He is also survived by his companion of 10 years, Tammy Wilkins. A memorial will be held Saturday, August 16, at 1pm at Sorrell's Grove Baptist Church, 210 Sorrell Grove Church Rd., Morrisville, NC. Visitation will be at the church from 12 to 1. In lieu of flowers please make a donation to the Hock Family Pavilion, 4023 N Roxboro Rd., Durham, NC 27704.
Doris Marie Laws White Carpenter
GALAX, Va. — Doris Marie Laws White Carpenter, 84, passed away Tuesday, August 12, 2014 at Waddell Nursing Home. She was born June 5, 1930 in Durham, North Carolina to the late Floyd Maurice Laws and Emma Jane Miller Laws. In addition to her parents she was preceded in death by an infant brother and brothers and sister, Donald, Jim and Nancy.
Doris was a 1948 graduate of Durham High School and attended Radford College. She was a longtime member of the First United Methodist Church in Galax. She married Hubert Stuart White, Jr. on November 12, 1955 and was married for 40 years until his death in 1995. Survivors of this marriage are Sarah Jane White Keene of Johnson City, TN and Hubert Stuart White, III, of Fairfax, Virginia. Two grandchildren also survive: Jacob Drake Keene and Jesse Stuart Keene, both of Johnson City, TN.
On May 20, 2000 Doris married William Perry Carpenter of Raleigh, NC, formerly of Durham. They had attended Durham High School together and found each other at their 50th High School Reunion. They married two years later and shared a happy life together until Alzheimer's took over the life of Jack. Doris cared for him with love as she did her "Whitey Darling." She always felt she was lucky to have had two very special husbands in her life.
Survivors also include brother Jerry Laws and wife Shirley Ann of Sparta, North Carolina; niece Carolyn Morhous and husband Larry of Bluefield, West Virginia; nephew Dr. Allen Laws and wife Ames Cameron of Galax, Virginia; sister-in-law Doris M. Laws of Bluefield, West Virginia; two great-nephews, three great-nieces; special cousins Bobby and Jean Miller of Caldwell Community, Orange County, North Carolina. Special friend Virginia Baumgardner of Fries, three stepchildren and their families also survive.
At the request of Doris, she will be cremated. A private graveside service for family and very close friends will be held Saturday, August 16, 2014 at 11:00 AM in Felts Cemetery.
At her request she suggests that in her memory, you visit a shut-in or a nursing home. She found so many people who have no one and that a brief "Hello" meant so much to them. She made many friends during Jack's stay at Waddell Nursing Home and the residents and staff sustained her during a difficult time. They were truly FAMILY. Give and you shall receive. A smile goes a long way in bringing happiness into someone's life. She wishes to thank her church family for their support and love extended to "Whitey" and Jack and to her during their illnesses. She remembered all who supported her during "Whitey's" and Jack's illnesses. She was blessed with dear friends and their love and support. She cherished her children and was so proud of them and the beautiful memories they shared.
A beautiful life has ended but hopefully her love for family and friends will be remembered...
In lieu of flowers, donations may be made to the First United Methodist Church, 306 West Center Street, Galax, VA 24333.
A guestbook is available online at www.vaughanguynn.com.
Marvel Ann Joneschiet Robinson
LEASBURG — Loving wife, mother, sister and grandmother Marvel Ann Joneschiet Robinson, 78, of Leasburg, NC passed away at UNC Healthcare Tuesday, August 12th. Marvel was born December 3rd, 1935 in Murdo, South Dakota to Lotis and Warren Joneschiet. She married Otho Cecil "Robbie" Robinson in Sioux City, Iowa and has been married for 56 years. Marvel retired as a civil servant from accounting and finance at Seymour Johnson Air Force Base after 30 years.
Marvel is survived by her husband, Robbie Robinson of the same residence; daughters, Lisa Riggsbee and husband Burke Riggsbee of Chapel Hill, Diane O'Dell and husband Steve O'Dell of Pittsboro; grandchildren, Zach O'Dell of Wilmington, Tyler O'Dell of Pittsboro and Jordan Riggsbee of Chapel Hill; and brother, Merlin Johns of Steilacoam, Washington. She is predeceased by her daughter, Sheri Robinson.
Marvel's main interest and focus has always been family. Her sense of humor and wit was always welcomed and enjoyed by everyone. Marvel enjoyed UNC basketball and Atlanta Braves baseball and could talk the games and players with anyone. She was a true joy to have on this earth and will be greatly missed.
Services will be provided by Walker's Funeral Home of Hillsborough and will begin at 2:00 pm, Saturday, August 16th. In lieu of flowers charitable donations can be made to the American Diabetes Association.


text:
Find a copy in the library
Finding libraries that hold this item...
|Material Type:
|Document Type:
|Sound Recording
|All Authors / Contributors:
John Kander; Fred Ebb; Rupert Holmes; Peter Stone; David Hyde Pierce; Debra Monk; David Loud
|OCLC Number:
|Compact disc.
Program notes and synopsis by Rupert Holmes (11 p. : ports.) inserted in container.
|David Hyde Pierce, Debra Monk ; with supporting performers ; orchestra conducted by David Loud.
|Event notes:
|Recorded Mar. 26, 2007, at Legacy Recording Studios, New York, N.Y.
|1 sound disc (65 min., 7 sec.) : digital ; 4 3/4 in.
|Overture --
Wide open spaces --
What kind of man? --
Thinking of him --
Woman's dead --
Show people --
Coffee shop nights --
In the same boat #1 --
I miss the music --
Thataway! --
Man is dead --
He did it --
In the same boat #2 --
It's a business --
Kansasland --
Thinking of him! ; I miss the music (reprise) --
Tough act to follow --
In the same boat #3 --
In the same boat completed --
Show people (reprise) --
Wide open spaces finale --
Tough act to follow (reprise).
|[music by John Kander ; lyrics by Fred Ebb ; book by Rupert Holmes ; original book and concept by Peter Stone ; additional lyrics by John Kander and Rupert Holmes].
User-contributed reviews
Similar Items
Related Subjects:(1)
User lists with this item (1)
- Musicals for a new milenium - the 2000s(58 items)
by josephhafner updated 2009-11-28


text:
Our top Cambridge Science Festival picks
Posted: March 05, 2014|
The 20th annual Cambridge Science Festival kicks off this week, here are our quick fire top picks:
Delve into Robin Ince's mind
The comic, science geek and BBC Radio 4 presenter will be (in and) out of his mind in an "unhinged" but rather funny lecture. (March 16)
Trick your senses
Cambridge Science Centre shows you how to fool your brain and misdirect your senses. Everything is an illusion after all… (daily)
Discover imaginary islands
It turns out quite a few explorers imagined whole islands, find out about the phantom locations at The Polar Museum. (March 13)
What a coincidence!
Professor David Spiegelhalter studies risk and coincidences. He'll be taking the surprising, applying probability and seeing what happens – go get involved. (March 13)
Newton's camera
Discover Isaac Newton's camera, how light can be dismantled and the earliest uses of colour photography at Grand Arcade. (March 14-17)
Bottle your genes
Extract DNA from you own cheek cells and then see what it looks like – don't worry, there'll be trained scientists from ARU on hand to help! (March 15)
Delve into a crime scene
Fingerprinting, evidence collecting and painstaking crime solving – come over all CSI at The Guildhall. (March 15)
Be a rocket scientist
Cambridge University's Department of Chemistry is going rocket crazy with a family talk. Expect bangs, whooshes and facts on how we sent men to the moon. (March 15-17)
How do you feel about your body?
This is what theatre duo New Art Club is questioning in a "sexy and entertaining" show all about being in a human body at Cambridge Junction. (March 15)
What is a star made of?
Using bicycle pumps and bits of microwaves, Dominic Ford and Dave Ansell are going to show you how to detect a planet a hundred light years away, and what a star is made of. (March 16)
Star Trek mathematics
The Arts Picturehouse is holding a Star Trek session on the math of Khan. Science and sci-fi collide… (March 17)
Download a full programme at cam.ac.uk/science-festival.
:: Cambridge Science Festival, in and around Cambridge, Monday, March 10 – Sunday, March 23. For tickets, locations and details, visit cam.ac.uk/science-festival


text:
Register now for free, or sign in with any of these services:
A true hero! My thoughts and prayers go out to his family who have suffered a tragic loss but hopefully find comfort in the fact they knew a great man.
Incredible picture! You have a great eye for your subjects!
Jen Stewart


text:
Keanu Reeves is a Queer Superhero
Recently, the intrepid co-hosts of Sound on Sight radio asked me to help host a podcast devoted to Keanu Reeves. I had been hoping for a long time that they would have just such a podcast, and I wanted to take this opportunity to explain a little bit more about why I find Reeves to be such a fascinating figure, and why I have spent so many hours of my life thinking about him and enjoying his films. It's already fairly common knowledge that Reeves is a pretty spectacular human being. In terms of recounting his personal awesomeness, this article (http://www.ranker.com/list/the-7-greatest-_true_-keanu-reeves-stories-ever-told/joanne) does a better job than I ever could. Give it a glance. But being an amazing human hasn't necessarily won Keanu the accolades he deserves in the artistic world. And so, in terms of arguing for his value as a film star, I'll take my own crack at it with this claim: Keanu is queer.
Now, before you get too excited, I should probably explain a bit more about my particular use of the word queer. In colloquial language, the word is still associated with sexuality and, in particular, sexual identities that aren't straight. In academia, where I spend most of my time, the sexual connotations are taken to be just one part of the larger arena in which queerness operates. As Peter Brooker says so well in his Glossary of Cultural Theory, "'to queer' is to estrange or defamiliarize identities, texts and attitudes that are taken for granted and assumed to have fixed meanings." (212) So, in effect, queerness can be at work anywhere where hierarchies have been erected that aim to make one thing seem better than another, and, really, to make us believe that we can be sure there are two self-evident 'things' there at all.
Let's make this more concrete, and take on the biggest issue first. Keanu is, as you may have heard, a bad actor. He's terrible, he's wooden, he's bla bla bla. I have no interest in arguing with anyone about what constitutes good or bad acting; however, people of every opinion will have to admit one thing: he's still around. It's been about 27 years since Reeves first hit screens, and Hollywood still wants him in films, and people still want to watch him. And while my whole essay will be trying to give different reasons for why this is, the acting question points us toward the first 'thing that we take for granted' that Reeves unsettles: the idea that there is a stable thing that we can point to and call 'good acting.'
Acting styles change with time, just as all forms of representation do. Variety opens onto the next possible style or convention. During the podcast, I pointed out that while I concede that Bill and Ted's Excellent Adventure is not up to Hollywood's accepted standards of technical prowess and production values, this does not dictate whether it is a film worth watching. Technical prowess wins awards and makes films like Ray and Walk the Line. While Bill and Ted's spawned a generation of knock-offs, when was the last time you thought about Ray or Walk the Line? The way that Reeves' voice often seems a little too flat, the fact that it's discomfiting to watch him cry on screen, and that he has the same run and walk in every single film are examples of his queering force. His unusual performance quality reminds us that these categories of 'good' and 'bad' are just concepts that we use and that, as this is all they are, they can always be used differently. French filmgoers in the 60s who really liked Le cinéma du papa were really sure that all those Nouvelle vague films were technical failures and just plain bad. And maybe they were right. For a little while, anyway.
And lest you think I have thrown in some sort of towel and am just defending bad acting, I think Reeves is an amazing performer. If you haven't recently watched My Own Private Idaho, River's Edge, The Gift, Scanner Darkly or, really, any of his comedies, do it now. Really. I'll wait.
Now that you're back, let's move on to a more interesting category: gender! Cast your mind back to that most wonderful of films, Point Break. Do you remember the scene, about midway through the film, when Bigelow is shooting Reeves and Lori Petty from above as they lie in bed and Reeves stares, consternated, at the ceiling? Have you ever noticed that Reeves and Petty look, well, pretty much exactly the same? While I'm giving Bigelow the credit of foregrounding this particular aspect in Point Break (I mean, whose idea was it to give them the exact same haircut?), Reeves' androgynous qualities are a defining aspect of his persona. We can see a similar mirroring happening years later between Trinity and Neo in The Matrix. I would argue, however, that this particular queerness, this troubling of that so contested line between the categories of male and female, is expressed in Reeves' career by more than just his looks.
Before we get there, you'll have to forgive me one more quick detour into film theory (I told you I live in academia, right?). Feminist film critics from the last few decades have argued a couple of things about Hollywood cinema, which I will sum up thusly: Hollywood cinema is all about organizing looks. We look as the camera looks, and the camera looks as the male character in the film looks, which is at the woman. The male is the active force in the film, chasing something that is often, but not exclusively, the woman. The woman is the spectacle – she is a passive force, a thing to be gained and not known, and her appearance often disrupts the forward narrative motion of the film. These arguments are a lot more complex than I'm able to express here, and there is a whole lineage of theorists who've thought of every counter argument you might currently be formulating. You should google Laura Mulvey or Teresa de Lauretis if you want to read more.
As you may have figured out, it seems to me that Keanu both troubles and makes obvious these kinds of structures. Most noticeably, Keanu is himself a spectacle. The camera in his films often wants to linger on his face and body in a way that is usually reserved for actresses. His presence in films is more inward than outward, or active (an obvious conclusion when you compare him to someone like Bruce Willis, who, in his action roles, has the inner life of a jar of pickles). And here we stumble across a fact I brought up in the podcast, which is that Hollywood in general seems to be uncomfortable with acknowledging Reeves as an 'action star.'
Though his most successful films all fall into the action category, one can trace a pretty consistent push to put him in films 'for women.' As a result, I've had to sit through a lot of movies like Sweet November, The Lake House and even, God help me, A Walk in the Clouds. And I can report back: these films are not nearly as interesting as the ones in which Reeves' persona is working against something like the expectations we bring to action films. And sure, one could say, they're just bad films, but that doesn't cover it. I'm going to lose a few of you here, but I'll say it, The Lake House was underrated. Especially when compared to the really, truly bad Keanu films, which aren't the romances, but rather Johnny Mnemonic, The Watcher and The Last Time I Committed Suicide (oh, so very, very bad). This push to get Keanu over where we can be comfortable with him, i.e., romancing the ladies, is evidence of the discomfort that his straddling of the supposed line between the male and female genders produces. I imagine the (non-)thinking goes something like this: he looks a lot more masculine next to Charlize Theron than next to Joe Pantoliano, so let's get him next to Theron already.
The disquiet his looks cause sprouts up in another form as well, and this would be the eternally recurring assumption that Reeves is gay. This rumor has been around for a long time, probably since the My Own Private Idaho days, and once reached its apex when paparazzi claimed that Reeves had gone on a spending spree with supposed lover David Geffen's credit card. That news story actually happened. I have no idea about the event itself. My own personal experience with the gay rumor reached a head when a young psycho once came into the video store where I was working, spotted Reeves on the screen, and screamed into my face "HE'S GAY." He fled the store before I could insert a DVD into his late return slot.
Now before I say anything else, there is an important point to be made here: Reeves deserves some serious credit for not denying this rumor, or even giving it the time of day. In other words, not only did Reeves star in (and thus help green-light) one of the most important queer films ever made (My Own Private Idaho), playing a non-straight character a decade before it was as accepted as it is now, he does not think being gay is something anyone should have to defend against. Anyone who wants to claim that Reeves isn't intelligent should think about that for a second – Reeves understands that as soon as you say, 'Well, being gay is fine, but I'm definitely not gay,' you've really said that being gay is not fine. There is a much more nuanced version of this argument in Michael De Angelis' book Gay Fandom and Crossover Stardom: James Dean, Mel Gibson and Keanu Reeves, and I point interested parties in that direction (I must acknowledge that my understanding of Reeves not denying being gay is based on De Angelis' much more researched and historically-oriented work, which I read many years ago. If I have forgotten any details, I'm sure the internet will let me know).
As I mentioned earlier, feminist film theory holds that Hollywood consistently attributes a mysterious inner life to its female characters, an inner life that makes them attractive to their male counterparts (and, hence, unattractive once 'known') – this idea is surfacing again these days in the discussions around the 'manic pixie dream-girl.' Can't we very easily say that Keanu has this same attribute? In his contemplative gaze, he seems to impart to us that there is something behind his visage that we can't quite reach. You want to describe him as 'deep,' as having some depth that we cannot ourselves fathom. Perhaps this is why he so well cast as drug-users (I Love You to Death, A Scanner Darkly) or as characters that are experiencing reality differently than those around them (The Matrix). And he is not somehow more feminine for having this opaque inner life – rather, Reeves' having it shows that it is not an essential quality of a certain gender. In fact, perhaps everyone has it. Perhaps none of us knows ourselves completely, or could explain every aspect of ourselves, and Reeves' excellence lies in his special ability to impart this fact to us.
But before we take the red pill and fall down that rabbit hole, I have one last (I swear) point to make in my quest to convince you of Reeves' greatness. It seems to me that the fascination and devotion Reeves draws likely springs from the way he always seems to be fine just 'being there.' The Zen quality we find in Keanu is probably what inspired Bernardo Bertolucci to cast him as the Buddha, for goodness' sake. It's not that Reeves embodies some facile idea of peacefulness, or being at one with oneself (although he might), but rather this: whatever unfathomable thing is going on inside of Reeves, it doesn't seem to be about trying to get somewhere else, or outsmarting someone, or proving that he is worthwhile. It's probably this aspect of Reeves' character that makes him such an easy target for those people who are desperately trying to do these things.
Reeves is an emblem of the value of giving yourself over to something without knowing exactly what to expect and to demand, unlike the stars that fit into the boxes that reward those kind of expectations. This is queerness, the realization that human identity means that all the things we will become are not the things we are now, and that 'identity' does not mean that we have to be identical to ourselves and our past selves. When we bring pre-set ideas to bear, when we can't let go of our hierarchies of gender, race, taste, and sexuality, we close ourselves off to the way things might be soon. And, worst of all, we don't get to have the blast that is watching, and loving, Keanu Reeves.
- Kate Rennebohm
Arrow Ep 1.16 'Dead to Rights' avoi...
The Americans Ep 1.05 'COMINT' expl...
9 Responses to Keanu Reeves is a Queer Superhero
Surprised you didn't mention "Something's Gotta Give" because that's a perfect example of Keanu playing the queer character of which you speak. Traditional macho theory would say that a younger man pursues an older woman because he doesn't have sufficient attraction to women his own age, but the movie makes clear that this is not the case (although Keaton's character plays this straight in preferring Nicholson, as soon as she knows she can get him, only settling for the younger, less worldly, less wealthy, and very infatuated doctor, when she is unsure of her own attractions). But the relationship is not shallow, and he is a character with depth. I credit the writing in part for that depth, but Reeves acts it well. For any question as to his acting abilities, look at his scenes with Jack Nicholson. They're incredible. He's a nice guy realizing that he's got a real rival for his lady in this guy. No one else could have done as good a job as Reeves in pulling that off. That tug of war over the check. That's a great scene.
In addition, while he is the "aggressor" in his relationship with Diane Keaton (in a gentle and decidedly non-macho way), he is entirely passive to her ultimate desires. Resulting in the scene in which he realizes that Keaton is more interested in Nicholson and not only gives into, but also pushes her towards her desires, abandoning his own, resulting in the nicest character in the whole movie being the only one left out in the cold – decidedly queer on several levels.
Also surprised because that movie exemplifies how Reeves' subtle performances are what make a movie. Never does he steal a scene for himself. Another actor might struggle with that role when trying to play against Nicholson and Keaton, in which fighting for the attention in a scene would have been an awkward and lopsided affair. But since Reeves is already a minimalist actor who appears to have far less ego, he can pull the role off exellently. Of course, Nicholson is a much louder presence than Reeves (he is Jack f-ing Nicholson after-all), but his scenes would be nothing without Reeves' low-key interactions. And, while I'm no expert, I'm not convinced that that is something that another actor could have pulled off so well as Reeves.
My impression is that when Reeves is acting, the audience doesn't consciously realize what he's adding to the movie. But I think we do comprehend it subconsciously, if only because body language has a huge subconscious impact and Reeves has excellent body language. (For a quick view of that see how Reeves is collapsed in on himself in "Constatine" – he's defeated, depressed, and got nothing left to give (for anyone that knows depression, Reeves' posture provides a visceral knowledge of everything you need to know about John Constantine.)
On rewatches, you can catch the things he was doing that impacted the movie without the audience knowing, but what I don't want missed is that just because you have to rewatch it to zero in on what exactly Reeves does, you'll get the impact of it on the first view.
That's what he does for "Speed," too, and what makes "Speed" work better for me, as a woman (though one that likes violent, action movies very much), than "Die Hard". Instead of Yipee-kiyay-MF, I'm getting a guy that cares (that's also Joss Whedon's writing, but give Reeves' credit where it's due, he's the one that demanded the rewrite so his character wouldn't be "a-hole who saves people"). He's subtle in expressing an earnest, compassionate guy who just wants to protect people (strangers, not his wife). And because it's subtle, it resonates better. Reeves draws the audience in instead of blasting out at them. Yes, that means his facial expressions aren't anywhere near as strong as most other actors out there, but that's not a bad thing. Not all characters should have their life written across their face. That will make some characters far less believable. Overall, it's a type of acting that's not inherently better or worse than other types, but I think Reeves does it well, and I don't get why people don't see that.
The true problem for perceptions of Reeves' acting really seems to be audience baggage. People claim they see Ted all the time. As someone who didn't see that role until a week ago (while trying to figure out if he was really as bad as some people thought), I don't see Ted at all. Nor do I see Neo. When people think Reeves is vacant, I wonder if they are still projecting Ted or Neo, because I don't see that either. He's not a great actor, but I think some people would find him better if they could come to the movies with a fresh slate (and stop relying on "loud" acting to spoon-feed them the character or story). Or maybe I'm just a sucker with bad taste.
You would have to know nothing of Keanu, or be a fool to not realize, he is indeed, a gay man.
Wonderful commentary on my favorite actor. Your point about his androgyny especially next to Lori Petty and Carrie Ann Moss was spot on – the equality that their physical beauty shares across the genders is so intimate in those images, I just love it, so enrapturing. His gentle nature, endearing exchanges and unique portfolio of roles have made him otherworldly and I just hope we are lucky enough to enjoy him for even more years to come. Would love to see him share a lead with Jodie Foster.
I like Keanu and he seems to be a very caring sensitive person. what he did with his money concerning the Matrix was very admirable. I am not going to tell you how I know this but Mr. Reeves is probably technically bi-sexual leaning toward the male end of the scheme of things. I know this not from rumor but from facts is all I will state. It does not matter one bit and it is no one's business. It is his private life. I don't know if he has made a choice one way or another but he has never married and is now 48. That sort of makes a statement in and of itself but then there are others who don't marry. He doesn't think anyone should have to "come out" and the reaction to most who do is rather unkind and remarks are always made of a derogatory nature. I think he would rather let people ponder about it but generally they end up forgetting about it because in the end it makes no difference. I have never thought he was a bad actor but just the opposite. Who is to say about that because it is just a matter of taste and how the actor interprets and is directed in a particular part they are portraying. I have enjoyed every movie I have watched where he has a part and especially the fluffy Bill and Ted movies in the past. He is a very versatile actor.
Finally! Someone GETS it! I have anticipated every one of Keanu's films and sat transfixed through each, defending his performances to short-sighted 'critics' (term used loosely) who try to pigeon-hole what is 'great acting' or not. I can see the sublime in him if they cannot. It's his gentle, easy, unassuming way. (Let's not forget his natural physical beauty.) But it's so much more than that. Who the hell cares if he's gay or not? Clearly, his response to this is as classy as they come. Haters who throw this up constantly are reaching anyway, to debunk something they cannot begin to understand, which I believe you have summed up nicely, thank you.
Thanks for mentioning that article, Anakin. I think it's interesting that Taylor mentions the beauty of his grace as a natural talent, in and of itself. That is what buoys his performances; he has the innate grace of a natural dancer. Another contemporary who had that same inner grace, the sort that touched every performance he did, was his close friend, the late and extraordinary River Phoenix.
In fact, "My Own Private Idaho", where both Reeves and Phoenix played opposite each other as leads, is almost like watching a long, somnambulist's dance between these two men. They come across as diamonds in the rough, as two people who were born with this unnerving grace and sensuality, not trained to create it, who use it to their advantage for survival or retaliation.
There'd even a scene that purposefully contrasts this natural beauty with objectifying cheesecake, reminding the audience that enjoying the observation of beauty, in its tenderness and ability to get intimate with our emotions, isn't necessarily the same as embracing lust. Lust is stupid and fun, but it only touches upon what the beauty that inspires it, really means; for those who possess it and for those who observe it. It moves us and we struggle, endlessly, to understand why. We break it down to measurements and biological impulses, but that still doesn't explain the deeper drive to respond to these things, why some things compel us to live and thrive, more than others.
@Anakin McFly – Thank you! I knew that that whole thing was more complex (as things tend to be over time) than just a flat denial, and I ran out of time to do the required research. As I said, I figured the internet would correct me, and you did! Thank you for all your useful info! And as to the Salon article, I haven't read it, and now I have that to look forward to. Thanks again!
@Daisy – I agree about the joyful aspect! I think you nailed it when you noted that he seems to be doing everything for the first time :)
Just thought I'd point out that Keanu has denied being gay in the past – when an interviewer asked him to 'make it official' in 1990, he replied: "No. [long pause] But ya never know."
In 1995, to journalist Michael Shnayerson, he used similar words to the ones you did: "Well, I mean, there's nothing wrong with being gay, so to deny it is to make a judgment. And why make a big deal of it? If someone doesn't want to hire me because they think I'm gay, well, then I have to deal with it, I guess. Or if people were picketing a theater. But otherwise, it's just gossip, isn't it?"
but he also added: "The fact is, I've never had a male sexual experience in my life." To Shnayerson's disappointment, that quote was cut out when the interview was published in the August 1995 issue of Vanity Fair.
Interesting article, though. I've seen similar points brought up before regarding how Keanu subverts traditional gender expectations by letting the camera treat him as spectacle; Charles Taylor wrote about this in the 1999 Salon article "Something in the way he moves".
Very well said, indeed. I've always been impressed with Reeves not jumping to explain away himself, to assure people that there are right and wrong ways of being and by all means, he's the right way. He just…is, he chills and just seems to go with the flow. It's a passive quality in a World where passiveness is underappreciated and even maligned, confused with laziness or indifference. Passiveness is also classically associated with femininity, which again returns us back to his ambiguous place in culture.
Keanu also has this joyful quality onscreen of perpetual wonder, of freshness; every time he portrays some experience, it comes across as if he's experiencing it for the first time. And maybe, he is; no two filmmaking experiences are alike, even if you're doing a film with the same people or remaking another — you can only capture a moment in time, on film, just once. Only once.
Reeves doesn't play The Game, the big game of presenting himself as a character or product, when talking with The Public. But he doesn't appear to actively avoid or reject that path, either. He doesn't make a statement on it, at all. His laid back, Hawaiian "`A `ole pilikia" mentality is pretty fascinating.


text:
Typical computer programs may incur costly memory errors that result in corrupted data. A new memory model is presented wherein it may be determined that certain data is critical and critical data may be stored and protected during computer application execution. Critical Memory allows that data determined to be critical may be stored and retrieved using functions enabled to increase the reliability of the data. Functions are presented enabling allocation of redundant computer memory; functions are presented enabling consistently writing critical data to redundant locations; and functions are presented enabling reading critical data while ensuring that the data read is consistent with the most recent write of critical data and enabled to repair inconsistent data. The memory model and functions presented are designed to be compatible with existing third-party libraries.
1. A method for protecting stored critical data from unintended updates, the method comprising:
designating a subset of system memory as critical data, the subset of system memory being a proper subset not comprising all system memory;
providing a store function enabled to store the critical data,
wherein, when storing the critical data, the store function storing the critical data in at least three redundant computer memory locations allocated upon a heap within system memory, and
when having stored the critical data, the store function verifying the successful completion of the store; and
providing a load function enabled to retrieve the stored critical data,
wherein the load function is enabled to verify that the critical data, having been stored in the at least three redundant computer memory locations, when retrieved, is compared within at least two of the at least three redundant computer memory locations and it is determined if the data in at least two of the at least three redundant computer memory locations is consistent.
2. A method in accordance with
3. A method in accordance with
When having determined that at least two of the at least three redundant memory locations contain data which is inconsistent, determining which data is correct.
4. A method in accordance with
5. A method in accordance with
6. A method in accordance with
7. A method of allocating storage and protecting critical data, the method comprising:
providing an allocation function enabled to allocate computer system memory for the storage of data,
wherein the allocation designates a subset of system memory as critical data, the subset of system memory being a proper subset not comprising all system memory,
wherein the allocation function allocates on a heap within system memory at least three redundant memory locations for storing identical copies of the critical data,
wherein the allocation function identifies the redundant memory locations as critical memory locations for the storage of critical data,
wherein the allocation function returns the address to a first redundant memory location,
wherein metadata is stored with the first redundant memory location for locating the other redundant memory locations;
providing a write function enabled to write data to the allocated redundant computer memory locations, wherein copies of the write data are written to each of the redundant locations; and
providing a read function enabled to read data from the redundant memory locations wherein reading the data comprising verifying the consistency of the read data within at least two of the redundant memory locations.
8. A method in accordance with
9. A method in accordance with
10. A method in accordance with
11. A method in accordance with
12. A method in accordance with
13. IN a computer system comprising one or more computer processors and computer-readable storage media, a method for protecting stored critical data from unintended updates, the method comprising:
designating a subset of system memory as critical data, the subset of system memory being a proper subset not comprising all system memory,
storing data using a store function enabled to verify the successful completion of the store;
upon being stored, the critical data being stored in at least three redundant computer memory locations allocated upon a heap within system memory;
retrieving the critical data using a load function enabled to verify that the critical data, having been stored in the at least three redundant computer memory locations, when retrieved, is compares within at least two of the at least three redundant computer memory locations and determined if the data in at least two of the at least redundant computer locations is consistent;
when having been found inconsistent, the inconsistent data, having been stored in the at least three redundant memory locations, being repaired by an operation enabled to determine which of the inconsistent data is correct.
14. A method in accordance with
15. A method in accordance with
16. A method in accordance with
17. A method in accordance with
18. A method in accordance with
Background and Relevant Art
Computer programs are ubiquitous and are used not just to direct the functionality of a conventional computer but also to control and enhance the functionality of myriad modern products and appliances. For instance, televisions, household appliances, automobiles, medical devices, and so forth, may incorporate computer programs to direct their functionality. Proper storing, reading, writing, and manipulation of data are inherent to the execution of computer programs. That the data written or stored is not corrupted or inadvertently altered prior to a subsequent read access is something which is assumed by executing software and, if otherwise, may cause executing software to fail to complete successfully or to execute or complete while producing an erroneous or suspect result.
Current computer memory models treat all data in an address space as functionally equivalent, even though, in practice, some data may be far more important than others in the successful or correct execution of a particular computer program. Memory may be written and read, for instance, by entities such as application programs, by functions and subroutines within an application program, and by third-party libraries called by application programs. There is often little or no protection or verification that the data being written or read by any of these particular entities is correct or that it is being written to or read from the correct memory location. Because one entity may be relying on data that may or may not be overwritten or otherwise altered or corrupted by another entity, there is a danger that erroneous, inadvertently altered, or corrupted data may adversely affect the proper and correct execution of a computer program.
In type safe programming languages like Pascal and Java, only an entity which knows what type of data it is accessing may read from or write to the data location. Although this may insure that only the proper type of data is being written or read, it in no way guarantees that the values being written or read are safe. Furthermore, even type-safe languages cannot protect against corruption of pointers or handles to memory locations or corruption, such as through hardware errors, to the data within the memory locations, themselves.
Computer programming languages such as C, C++, and others do not typically provide even the level of intrinsic guarantees about memory safety which are present in type-safe languages such as Java. Many applications are still written using these languages for performance and compatibility reasons and, as a result, memory errors continue to be common causes of both program failures and security vulnerabilities. In a typical C or C++ program, for example, it is possible for an erroneous pointer or memory read or write to cause the application to terminate abnormally (i.e., "crash") or to produce incorrect output or results.
Beyond the corruption due to inadvertently erroneous reads and writes, hardware errors may also introduce possible errors to otherwise correctly executing software. Even an otherwise correctly written program calling only correctly written subroutines or libraries may suffer ill effects if a memory location, itself, is somehow corrupted or its value inadvertently changed.
Because of the sometimes unreliable nature of data stored in computer memory and the inherent reliance of software on all data being perfectly reliable, computer software continues to be plagued with problems of reliable execution and production of reliable results.
A new approach is provided for providing memory safety to applications written in computer languages which may or may not provide adequate safety measures. The approach is taken that some data—critical data—may be more important than other data, and that critical data requires stronger consistency guarantees than other, non-critical, data For example, in a banking application, individual account information may be more important than the view data used to populate a user interface.
As illustrative but not restrictive, and although not required, embodiments of the present invention relate to the protection of critical data and critical memory variables within a software application. The present invention relates to the designation of certain program data as critical data and certain computer memory as critical memory and embodiments allowing for certain critical operations on critical memory which will ensure that all data written to and read from critical memory is consistent and free from errors, corruption and inadvertent updates.
An example embodiment is provided which provides for allocation of redundant storage for critical data. Data stored to critical memory using critical stores is written to the redundant locations. Critical data, when read using a critical load, is compared within the redundant storage locations to determine if errors may be present. If errors are present, then a majority voting scheme is employed to facilitate repair of the compromised data.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
Additional features and advantages of the invention will be set forth in the description which follows, and in part will be obvious from the description, or may be learned by the practice of the invention. The features and advantages of the invention may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. These and other features of the present invention will become more fully apparent from the following description and appended claims, or may be learned by the practice of the invention as set forth hereinafter.
In order to describe the manner in which the above-recited and other advantages and features of the invention can be obtained, a more particular description of the invention briefly described above will be rendered by reference to specific embodiments thereof which are illustrated in the appended drawings. Understanding that these drawings depict only typical embodiments of the invention and are not therefore to be considered to be limiting of its scope, the invention will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
Embodiments of the present invention relate to Critical Memory (CM). CM modifies a typical, flat, computer memory model and CM recognizes that certain data may be critical to correct program execution but that not necessarily all data within a computer program context is critical to correct program execution. CM allows certain data to be marked as critical and allows for a distinction between critical and non-critical data. The embodiments of the present invention may comprise, but are not limited to, a special purpose or general-purpose computer including various computer hardware, as discussed in greater detail below, as well as methods, systems, computer-executable instructions, and computer program product embodiments.
Computing systems are now increasingly taking a wide variety of forms. Computing systems may, for example, be handheld devices, appliances, laptop computers, desktop computers, mainframes, distributed computing systems, or even devices that have not conventionally considered a computing system. In this description and in the claims, the term "computing system" is defined broadly as including any device or system (or combination thereof) that includes at least one processor, and a memory capable of having thereon computer-executable instructions that may be executed by the processor. The memory may take any form and may depend on the nature and form of the computing system. A computing system may be distributed over a network environment and may include multiple constituent computing systems.
Referring to
As used herein, the term "module" or "component" can refer to software objects or routines that execute on the computing system. The different components, modules, engines, and services described herein may be implemented as objects or processes that execute on the computing system (e.g., as separate threads). While the system and methods described herein may be implemented in software, implementations in hardware, and in combinations of software and hardware are also possible and contemplated.
In the description that follows, embodiments of the invention are described with reference to acts that are performed by one or more computing systems. If such acts are implemented in software, one or more processors of the associated computing system that performs the act direct the operation of the computing system in response to having executed computer-executable instructions. An example of such an operation involves the manipulation of data. The computer-executable instructions (and the manipulated data) may be stored in the memory 104 of the computing system 100.
Computing system 100 may also contain communication channels 108 that allow the computing system 100 to communicate with other computing systems over, for example, network 110. Communication channels 108 are examples of communications media. Communications media typically embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and include any information-delivery media. By way of example, and not limitation, communications media include wired media, such as wired networks and direct-wired connections, and wireless media such as acoustic, radio, infrared, and other wireless media. The term computer-readable media as used herein includes both storage media and communications media.
Embodiments within the scope of the present invention also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer. By way of example, and not limitation, such computer-readable media can comprise physical storage and/or memory media such as RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or a combination of hardwired or wireless) to a computer, the computer properly views the connection as a computer-readable medium. Thus, any such connection is properly termed a computer-readable medium. Combinations of the above should also be included within the scope of computer-readable media.
Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described herein. Rather, the specific features and acts described herein are disclosed as example forms of implementing the claims.
Critical Memory
Critical Memory (CM) is a modification to a typical flat memory model and CM recognizes that certain data, but not necessarily all, are critical to correct program execution. Critical data may be defined to be a subset of data that which may be necessary for continued operation of an application in the presence of errors. Alternatively, critical data may be defined as a subset of an application's data whose consistency has been determined to be crucial to preserve in order to recover the application successfully after a failure. Critical data may be defined as the data an application programmer has determined is most important to preserve during execution of a particular application or process. An embodiment of CM allows that data and memory critical to the execution of a computer program may be identified and may then be protected from being corrupted by erroneous program stores or by other inadvertent corruption through hardware errors or errant behavior of function calls, library calls or action by third-party software. The concept of critical memory is introduced. Critical memory is memory which has been determined—by a programmer, by an automated system, or by other means—to be critical to the execution of a particular computer program.
CM may be used in applications where memory locations might become corrupted, either through unsafe program operations, possible race conditions, hardware transient faults, and so forth. CM, by its nature and by its design, is consistent and compatible with large bodies of existing computer programming code. CM has been designed to operate compatibly with existing computer programming code without the necessity of modifying the already existing code.
An important application of CM is to improve program reliability. Systems built upon CM may be used to recover from memory errors and hardware transient errors. CM may be used to provide systematic assurances that unwanted memory interactions between concurrent threads are not possible. CM may be used with Software Transactional Memory (STM), as is known to those skilled in the art, to provide additional safety and assurance of correct program execution. Proposed implementations of STM provide weak atomicity semantics—they do not guarantee the result of an atomic section is consistent if the data being updated in the section is also being modified elsewhere outside an atomic section. CM can be used to decrease the probability that incorrect threads writing to shared data outside an atomic section modify that data while a transaction is taking place. CM may be used alone or may be used in combination with STM to provide an optimistic concurrency implementation with lower probability of atomicity violations. CM has been designed to, when utilized, probabilistically tolerate errors caused by errant threads within computer software execution.
Computer software applications with built-in state-saving and error recovery mechanisms can recover from a broad range of software faults more often than applications that use generic techniques such as system-level checkpointing. Such recovery mechanisms are typically written by the programmer who makes assumptions about the consistency of the state saved by the application for recovery. CM formalizes the notions of critical data, and the state-saving, consistency-checking, and error recovery, above.
One particular embodiment of CM introduces the operations map_critical, unmap_critical, and promote. The map_critical operation may be used to designate specific memory as containing critical data. The unmap_critical operation may be used to designate specific memory, which had previously been designated as containing critical data, to be memory the contents of which does not contain critical data. The promote operation both maps a memory address as critical and promotes the contents of that address, whatever they are at the time the promote operation is invoked, to be critical.
The map_critical operation may be used to mark a memory address used in a program as critical. This places the data in the memory address under the protection of CM and guarantees that the data is safe from unintended modification, provided it is accessed according to the rules as provided by CM.
In one particular embodiment, two new memory operations are added to typical computer memory management models, critical_load and critical_store. Critical_load and critical_store are operations which are allowed to consistently read and modify, respectively, critical memory. No other program operations can modify the contents of critical memory with respect to subsequent critical_loads.
A Summary of the operations defined in one embodiment of Critical Memory (CM) are summarized in Table 1.
A critical_load is defined as an operation that could potentially read from critical data and is allowed by the semantics of the program to do so. A critical_store is defined as a static instruction that could potentially write to critical data and is allowed by the semantics of the program to do so. CM guarantees that any update made to critical data through a critical_store will correctly update the critical data, and any update made to the critical data through a normal store will not be able to update the critical data (in a consistent way). Any read of the critical data done through a critical_load will see a consistent version of the data (whereas any read of the critical data done through a non-critical_load may or may not see a consistent version. By consistent, it is meant that a critical_load to a critical memory location will read the value written by the last critical_store in the program to the critical memory location. CM ensures that any intervening updates to the critical data by non-critical stores will be transparent to the critical_load.
In one embodiment, a critical_load conveys the intent—by the programmer or otherwise—to read from critical data and is allowed by the semantics of a valid program to do so. A critical_store conveys the intent—by the programmer, by an automated system, or otherwise—to write to critical data and is allowed by the semantics of a valid program to do so. While a majority of a software application may not be type-safe, CM ensures that the subset of the program (for example, a class, function, or module) that uses critical_loads and critical_stores can be statically checked for correctness independent of the operations performed by the rest of the application and its libraries. Any code which violates memory safety should not be allowed to perform critical_stores and hence would not be able to overwrite the critical data. CM allows a programmer to preserve the consistency of critical data even in the presence of arbitrary unsafe code.
Guarantees of CM extend only to the critical data. CM does not provide any guarantees to the non-critical data. In a program, the same instruction may access both critical data and non-critical data depending on the program context and execution flow. It is necessary to mark any load or store that may access critical data as a critical_load or critical_store. When non-critical data is accessed by a critical_load or a critical_store, the effect of the operation is similar to an non-critical load or non-critical store on the non-critical data. An non-critical_load is allowed to read from critical data, but the degree of consistency of the data read by such an non-critical load would be defined by the particular implementation of CM.
The semantics of CM with respect to critical_loads and non-critical_loads and critical_stores and non-critical stores are summarized in Table 2.
As implemented in one embodiment, once a critical address has been unmapped using the unmap_critical operation, it can be accessed using normal loads and stores and critical_loads and critical_stores to that address have the same effect as normal loads and stores. Memory addresses may be unmapped, for example, when the programmer is finished using the memory region and de-allocates it (e.g., by using a free ( ) operation).
Reference Interleaving
In one particular embodiment, CM may be used by an application to protect critical data despite potential unsafe operations performed in third-party library code or in external function calls. CM may be implemented within an application that calls a library that has no knowledge of CM. CM may be implemented over a spectrum of choices concerning the semantics which constrain the CM implementation and which provide varying degrees of compatibility with non-CM aware libraries. By way of example, three degrees of compatibility are illustrated which may be implemented in particular embodiments of the present invention (but should not be considered to limit the scope of the present invention).
In the example, three illustrative degrees of compatibility may be termed Weak, Strong, and Extreme compatibility. Table 3 illustrates the results of loads and stores given the three illustrative degrees of compatibility.
The first column in Table 3 illustrates a sequence of interleaved memory operations. The remaining three columns show the value of the variable x assuming which of the three different degrees of compatibility is employed within the particular embodiment. After the memory location x has been marked as critical by the map_critical operation, and after the first critical_store of the value 5 into the location x, then, under each of the three degrees of compatibility, the value of x, when read by a load x, is 5. The differences in the degrees of compatibility are illustrated by the results after a subsequent normal store (i.e., not a critical_store) of the value 6 into the location x.
Under weak compatibility, there are no guarantees about the effects of non-critical stores to critical memory locations. As a result, after the non-critical store of 6 into location x, an non-critical load from the location x will produce undefined results. However, a critical_load from the location x will produce the value last stored by a critical_store which, in this case, is the value 5. After the critical_load from the location x, then the value of the location x has been guaranteed to be correct and consistent so, absent any intervening non-critical stores, then each subsequent load will also result in the value 5.
Under strong compatibility, a subsequent non-critical load from an address will result in the value stored by the previous non-critical store provided that an intervening critical_load has not restored the value or an intervening critical_store has not changed the value. In this case, the non-critical load from the address x will result in 6, the value stored by the preceding non-critical store (without an intervening critical_load or critical_store). Subsequent critical_loads, however, will result in the value 5 being returned—the value written by the previous critical_store. With the strong compatibility approach, third-party libraries will be able to modify critical data as if it were normal memory, but the effects of updates by the third-party libraries using non-critical stores will not be visible to subsequent critical_loads in the application.
Under extreme compatibility, loads from and stores to critical addresses are completely independent of critical_loads and critical_stores to the same addresses. An non-critical load from an address results in the value placed in the address by the last non-critical store to that address. A critical_load from a critical address results (as always) in the value stored in the address by the last critical_store. Under extreme compatibility, a critical_load will not restore the value stored by a critical_store for subsequent non-critical loads. Extreme compatibility can be used, for instance, in systems wherein called library functions perform call-backs into an application which contains critical_stores or critical_loads and it is desired that the stored data remain consistent within the library function.
CM and Libraries
An application employing CM may, in some instances, call library code which is potentially unsafe and which is not aware of an CM implementation or CM semantics. Library code is not CM-aware if it does not allocate critical data or perform critical_loads or critical_stores. In a case where the library code does not need to modify critical data, the library code can execute as it was written and the loads and stores the library code does to non-critical data occur as if CM was not being used. If library code performs non-critical loads from critical addresses, then the values read will be consistent with the values written to the addresses by the CM-aware main application prior to calling the library.
If a library is required to modify critical data, then, as in some embodiments, additional actions are necessary. An example is illustrated by the following code:
While the above example assumes a library which is not CM-aware, in some embodiments, libraries may also be written using their own CM critical memory. This would lead to the issue of interfering critical memory updates between a library and the application. An approach in one particular embodiment would be to associate a unique key with each compilation unit (i.e., library or application) and tie each static critical memory operation in a unit to the unit's unique key. In this case, critical memory that is mapped with one key could only be updated with a critical_store that had the same key associated with it.
By following the above approaches, embodiments of CM allow incorrect library functions which have memory errors to continue execution and see a consistent view of memory (by using strong or extreme compatibility semantics). In these embodiments, CM guarantees that the critical data of the application is not impacted by the memory errors introduced by library functions as long as the library does not perform verfied_stores to the application's critical data.
Local Immutability
In some embodiments, CM may also be used to provide local immutability of data. For example, a program which is about to open a file for update might check to see if the file is in a particular scratch directory to limit the effect the update can have on the rest of the file system. A security exploit of this action involves a race condition whereby the string that was checked is updated by another thread between the time of the check, and the time the file is actually opened. If the string were truly immutable, then the subsequent update would be impossible, and the problem is solved. CM may be employed to accomplish this effect by doing a map_critical of the memory locations before the check, using a critical_load when the operation is performed, and doing an unmap_critical after the operation. When this procedure is followed, non-critical updates to these locations in the time between the check and the operation are ignored by the critical load.
By the above procedure, CM can provide the functionality of local immutability, which can be appreciated by those skilled in the art, is an element which can enhance the guarantees provided by Software Transactional Memory ("STM"). It may be appreciated that CM may be employed in this fashion to ensure local immutability independently of STM and may also be used in conjunction with STM as CM adds additional and orthogonal functionality.
Optimization Opportunities using CM
In certain embodiments, CM may provide opportunities for enhanced performance through optimizations made possible by CM. One such opportunity is based on the observation that critical_loads and critical_stores will generally, but not necessarily, form a small subset of all loads and stores within a typical software application. If the particular embodiment employees weak compatibility semantics, as discussed above, critical_loads and critical_stores can be repositioned independently relative to other loads and stores in the software application. For example, in the code sequence:
A second optimization of CM is possible in another embodiment. CM introduces the ability to reason locally about critical values. When addresses are mapped as critical and local to a component, then an optimizer is guaranteed that other components, even when executing in the same address space, cannot modify the critical addresses unless they are specifically allowed to do so. As such, use of critical memory as taught by CM may provide data-centric guarantees of isolation even within the same address space.
In certain embodiments, CM may be considered to be an embedding of a smaller, simpler, well-typed program—operating only on critical data—within another, larger, program. The simpler critical data program provides the optimizer additional opportunities for optimization over the original program which, when written in C or C++, as those skilled in the art are aware, often contain aliases that confound attempts at static analysis critical for optimization.
Improving Atomicity Semantics with CM
In certain embodiments, CM may be used in conjunction with transactional memory to provide probabilistic isolation guarantees to transactional memory implementations which, by their nature, provide only weak atomicity. Many transactional memory implementations use optimistic concurrency control for transactional reads and write-in-place semantics in order to achieve high-performance. However, transactional memory provides weak atomicity in order to achieve this high-performance.
In particular embodiments, CM may be used with software transactional memory (STM) schemes to provide a low-overhead method for decreasing the probability that conflicting memory operations will violate the atomicity of the STM implementation. CM may be used to temporarily hide effects of updates to memory from other threads during the execution of an atomic section. CM critical_load and critical_store operations may be paired with complimentary STM operations. For each memory location which is modified in an atomic section, STM can provide support for conflict detection and undo, while the CM system can independently provide for resilience to external modification outside the thread.
The code sample "a" (which is written in a C-like pseudo-code), below, shows a simple example of STM code which atomically accumulates a local value, localSum, into a shared variable, Total->Sum.
a) Original STM Program
The code sample "b", below, shows the pseudo-code corresponding to the code, above, with STM primitives exposed. In this example, C++ exception handling is used to encapsulate the body of the atomic block. A runtime primitive TxStart creates a new transaction container. Accesses to the shared variables are done via runtime primitives, TxRead and TxWrite. The TxCommit primitive is called at the end of the atomic block to complete the transaction. If the transaction state is valid and there is no conflict with another transaction, the effects of the transaction are published to shared memory. Otherwise, an internal exception, TxError, is raised. The handler for this exception, in the event of the exception, rolls back the transaction state and re-executes the transaction body.
b) STM Program with Primitives Exposed
CM is integrated with STM in the code, above, in order to prevent a third thread which does not follow the transaction protocol from writing to the shared variable Total, outside the atomic section and corrupting it. An example of such use of CM as integrated with STM is shown in code sample "c", below. CM is used to restore the contents of the Total variable to its contents within the atomic section. Calls to critical_store and critical_load operations are inserted within the atomic section along with the TxRead and TxWrite operations. These critical operations will ensure that the value of the Total variable is unlikely to be updated outside the atomic section.
c) STM/CM Program with Primitives Exposed
Two other mechanisms are illustrative, but should not be considered restrictive, of CM integration with STM. When a transaction is rolled back by STM, values of variables modified within the transaction are restored to their original values. The restoration of the values by STM are made visible to CM by use of the promote operation. By promote, the values as restored by STM are made the values recognized by CM and maintained consistently by CM.
When a transaction is committed by STM, values written within a transaction are written to a permanent state and contents of memory locations are updated with these values. By calling an CM call-back function within STM, just before the STM transaction commit, which performs a critical_load operation on every value that is written to the permanent state, then the value written to the permanent state is correct and consistent by ensuring that the value is that written by the last critical_store.
Implementation of a Runtime Protection System
A runtime protection system (RPS) for the protection of critical heap data is one example embodiment of a runtime system which implements a particular instance of CM for heap-allocated objects and is described here. This example embodiment provides custom memory allocation routines for managing critical data in a software application.
Using a Runtime Protection System in an Application
A determination may be made as to which application data is to be considered as critical. The information concerning which data is critical may then be communicated to the runtime system which may allocate critical data using a function, for example, critical_malloc as will be further explained, below. When an application is done with the data, then a routine, for example, critical_free may be called to free the memory which had been allocated with critical_malloc.
RPS may also provide defined operations to allow the application developer to identify critical_loads and critical_stores in the program. The programmer may then use the defined operations to ensure that all critical stores to critical data in the program are conveyed to the RPS system using the RPS routine critical_store( ). Similarly, critical loads from critical data may be marked with the RPS operation critical_load( ), in order to ensure the consistency of the data that is loaded.
d) Original Code without CM Runtime Protection System
e) Code Employing CM Runtime Protection System
The above listed code examples (which are written using a C-like pseudo code) illustrates an example of using RPS within an example of typical computer programming code. In this example application, patients enter and leave a system at various times and patient-data is stored in elements of a linked list. Each node of the list contains a pointer to a patient record and a pointer to the next node on the list. In this example, the linked list nodes have been determined to be critical data, because if a node on the list were to be corrupted, then it would be possible for the entire list data-structure to be lost. The above example use of RPS, by design, does not protect each individual patient's data from corruption because that data has not been determined to be critical, but the data necessary for protecting the list structure has been marked as critical and RPS has been used to more likely ensure its integrity. The determination of which data is critical and protecting a subset of all data having been determined to be critical is one, among others, of the utilities of the RPS/CM innovation.
The RPS System may also be provided via an API in an operating system or within a development tools environment, for example, to allow application developers to identify critical data, allocate critical memory, and to perform critical loads and critical stores. Such an API may contain, for example, function calls such as (but not limited to) critical_malloc( ), critical_store( ), and critical_load( ).
Management of an RPS Heap
In one particular embodiment, RPS may use replication and redundancy to achieve the requirements of CM. RPS may use a smart memory manager for implementing heap allocation and deallocation operations and for efficiently implementing the additional critical_load and critical_store operations. In one particular embodiment, in addition to the main object which has been marked as critical, RPS maintains two copies of every object that is allocated on the heap. The copies are called shadow copies and mirror the contents of the original object. When a critical_store is done on the object, the shadow copies are updated with the contents being stored in the main object. When a critical_load is done on the object, the object and the data it contains is compared to its shadow copies and the data they contain to ensure that the data is consistent. If there is disagreement between the main object and one or both of the shadow copies, then the object and its shadow copies are made consistent—i.e., repaired—using simple majority voting on their contents. Note that, although two redundant copies, in addition to the main copy, are discussed in this particular example, any number of copies may be used in other embodiments in keeping with the spirit of the invention.
For instance, in
Referring to
In one particular embodiment, RPS allocates all critical data in the program using RPS critical memory allocation routines. For every critical object allocated, an RPS memory manager may then transparently allocate two shadow objects on the heap. The shadow objects and the main object are, optionally, allocated in different, preferably random, physical or logical areas of memory in order to minimize the danger of all copies being similarly corrupted by a single event. The shadow object addresses may then be stored as part of the heap metadata of the original object so that a write of the original object can follow the pointers in the metadata to the shadow copies and update the shadow copies with the data being written to the primary object. Similarly, by following the shadow object pointers, a critical read or critical load of the original object is enabled to follow the pointers to the shadow copies and compare the shadow copies with the contents being read or loaded. Table 4, below, shows examples of some fields of the metadata stored with an RPS object in one particular embodiment.
In one example, in order to update or compare the shadow objects, the object metadata is accessed during every reference to the object. The object metadata is stored at the beginning of the main object and may be retrieved given the base address of the object. Hence, a fast mechanism to retrieve the base address of the object given an internal pointer to it would be advantageous. This may be provided by the RPS heap, which is organized, as is understood by those with ordinary skill in the art, using a big bag of pages (BIBOP) style. By doing this, objects of the same size (rounded to the nearest power of two) are grouped together in a contiguous heap region. Such a heap organization, as in this example, is understood by those with ordinary skill in the art to be advantageously used in certain instances for reducing internal fragmentation of a heap. RPS may use this technique for improved metadata lookups.
Consider an internal pointer Ptr to an object. Since the heap may be partitioned into fixed-size contiguous regions by object size, the size of an object may be determined given an internal pointer to the object. In such a case, the size may be 8 bytes. The variable Start—8 may represent the starting address of the heap region containing objects of size 8. The integer division of (Ptr-Start—8) by 8 may then yield the index of the object in the region containing objects of size 8. The index multiplied by the object size, namely 8, corresponds to the starting address of the object pointed to by Ptr. Note that object sizes are rounded to powers of two, and hence, the multiplication and division operations on the size may be performed efficiently using bit-shift operations.
RPS may allocate objects and their shadow copies randomly in the heap using allocation routines similar to routines known by those with ordinary skill in the art as DieHard routines. This may be done to ensure that the probability of a random store to the heap corrupting both the object and its shadows is very small. The object metadata may also contain a valid field to contain a special bit pattern if the object is valid. Such a technique may be useful to prevent wild pointer accesses through critical loads and stores to invalid objects on the heap. RPS may also check that critical stores to critical data do not exceed the bounds of a critical object. This may be accomplished by storing the actual size of the object allocated (not the rounded-up size) as part of the object metadata, and checking the access at runtime to ensure that it is within allowable bounds. The metadata for every object on the heap may be protected with checksums to prevent it from corruption. In addition, a redundant copy of the metadata may be stored in a separate hash table in a protected heap region, which can then be used to restore the metadata in case it is corrupted. The hash table, as known by those with ordinary skill in the art, may be protected using page-level mechanisms.
f) Example of Critical_Malloc Implementation
g) Example of Critical_Free Implementation
Example code, written using a C-like pseudo-code, for example implementations of the critical_malloc( ) and critical_free( ) operations are shown in code samples "f" and "g," above. The RPS runtime operations critical_load( ) and critical_store( ) may be responsible for comparing and updating the shadow copies of the object in RPS. In this example, in order to update or compare the shadow copies, the pointer to the shadow copies for that object must first be retrieved. It may be noted that the pointers, themselves, may be corrupted. In this case, the pointers could be checked and restored from the hash table. This may be done by a getShadowAddresses( ) function, which, given a pointer inside an object, would retrieve the corresponding locations inside the shadow copies of the object.
For instance, in
The pseudocode of the getShadowAddresses function is shown in code sample "h," below. It uses a getBaseAddress function, which, given a pointer to an object, returns its base address as was explained before. It may be that in the getShadowAddresses function, a hash table is accessed only when the metadata is invalid or if the checksum may be incorrect. Otherwise, the offsets within the shadows may be computed from the metadata itself, which is typically a much faster operation. The critical_load and critical_store functions, in this example, would return immediately if called on a pointer that was not allocated with critical_malloc (because a normal malloc would not have reserved memory for the shadow copies).
h) Example of Implementation of getShadowAddresses
In some embodiments, there may be optimizations possible which may speed up critical loads and reduce the necessary computational resources. In some instances, loads may be the more numerous operations an application. One optimization may be possible based on the observation that it is sufficient to compare an original object with only one of the shadow copies during a critical_load in order to detect an error. After comparing only one shadow copy, if there is a mismatch, the second shadow copy may be used to determine which data is in error and to repair the error by using a majority voting scheme. It should be noted that if a second shadow copy is never checked, it may potentially accumulate errors over a period of time, and when a mismatch between an object and its first shadow copy is detected, the second shadow copy may also have been corrupted, making repair impossible. A solution to this problem may be effected by periodically switching the pointers to the shadow copies and checking only with the first shadow copy. This design would allow for both shadows to be checked periodically and would prevent accumulation of errors in any one particular shadow copy.
For instance, in
Another optimization possible would be to maintain a one-element cache for the metadata of the last-accessed object. As many applications have repeated consecutive accesses to the same object, this would reduce the time necessary to service the repeated accesses. Large caches may make the cost of a cache-miss higher as the entire cache needs to be searched on every access. It may be found that a single element cache significantly improves performance and that larger caches may actually degrade performance.
Strategy for Repair in the Runtime Protection System
When a critical_load detects a mismatch between the contents of an object being loaded and the contents of its shadow copy(ies), RPS may launch a repair routine to facilitate correcting the error. One implementation of the repair routine would be to compare the entire object with the shadow copies and use majority voting to find the replica that is in error. However, it may be the case that all objects have errors in them and none of them entirely agree with each other. It is important to note that some parts of an object or shadow copy may still be correct even when the copy, itself, as a whole, is in error. These smaller parts of objects may agree with their counterparts in another copy and may be used to repair the damage (if any) in the third replica. So even if none of the replicas agree with each other when taken as a whole, it may be possible to perform majority voting on a field-level, byte-level, bit-level, or other subset-level basis and facilitate repair of the discovered errors. Because it may be wasteful of computational resources if there is actually only one error in the replicas, faster object-level voting may suffice and may preferably be employed unless object level voting fails and subset-level comparison and voting is determined to be necessary.
In general, it may be preferable to perform majority voting on a coarse granularity and switch to finer granularities only if the coarser-grained voting fails. A strategy which may be implemented in one embodiment would be to perform the voting first at the granularity of the entire object, and, if this fails, employ an exponential back-off strategy to reduce the size of the chunk on which the voting is performed. In the worst-case, this strategy would degrade to a single-byte voting strategy. In the case that multiple replicas have errors in the same byte, then the voting may fail even at the single-byte level, and the repair would fail, be reported as impossible, be aborted, or proceed into further processing as directed by the system or application.
RPS is a particular embodiment aimed to follow CM semantics. Additional operations may be included to handle a case where multiple replica copies are corrupted in exactly the same way (by, for instance, a random or malicious error). RPS, by its design, lessens the probability of this possibility by randomly distributing the replicas on the heap. The protection provided by RPS is probabilistic (in that it makes errors less likely and facilitates repair, but cannot absolutely guarantee error free storage). In the above example, RPS does not recover when the hash table storing the metadata values or the allocation bitmap is corrupted. But, as may be appreciated by those with ordinary skill in the art, a similar embodiment directed toward the metadata and heap information may provide similar protection to that data. Also as can be appreciated, such data may also be protected by page-level mechanisms.
This paper has described RPS, a data-centric runtime protection system used for improving the reliability of type unsafe programs (such as C and C++) and other programs needing protection of data determined to be critical data. RPS is based on a new underlying memory model called critical memory (CM), and allows programmers to identify key program data as critical. Only critical stores may modify critical data, preventing arbitrary unsafe stores in a program from corrupting this data. RPS implements critical data using replication, and as a result provides probabilistic correctness. RPS allows programmers to selectively identify and protect key data structures, thus allowing the effort and overhead of using RPS to be tailored to the particular application.
Accordingly, the principles of the present invention provide a mechanism, through a runtime protection system (RPS), for creating, maintaining, and employing critical memory (CM) for protecting critical data and computer memory from corruption by erroneous program stores, hardware memory errors, and inadvertent updates. RPS/CM allows data which is critical to the execution of a program to be protected and consistency of data to be ensured.
As can be appreciated by those with ordinary skill in the art, the present invention may be embodied in specific forms other than or in addition to those described without departing from its spirit or essential characteristics. The described embodiments are to be considered in all aspects only as illustrative but not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.
Patent Citations
Non-Patent Citations
Referenced by
Legal Events
Original Image


text:
A friend of mine had one. Very nice handgun. He sold for larger capacity, but shot it very well. It carries nicely, etc.
Results 1 to 8 of 8
Thread: s&w 3913 9mm
Remove Ads
Search tags for this page
3913 9mm,
3913 9mm price,
s&w 3913,
s&w 3913 9mm,
s&w 3913 9mm price,
s&w 3913 review,
s&w 3913 reviews,
smith & wesson 3913 price,
smith and wesson 3913,
smith and wesson 3913 price,
smith and wesson 9mm 3913 price,
sw 3913 reviews
Click on a term to search for related topics.